我希望有人可以幫助我解決我的問題,因為我還不習慣 python 和 numpy。我有以下包含 24 個元素的陣列:
load = np.array([10, 12, 9, 13, 17, 23, 25, 28, 26, 24, 22, 20, 18, 20, 22, 24, 26, 28, 23, 24, 21, 18, 16, 13])
我想創建一個長度與“load”相同的新陣列,并為陣列中的每個元素計算當前和接下來兩個數字的總和,這樣我的目標陣列看起來像這樣:
[31, 34, 39, 53, 65, 76, 79, 78, 72, 66, 60, 58, 60, 66, 72, 78, 77, 75, 68, 63, 55, 47, 29, 13]
我試圖用以下代碼解決這個問題:
output = np.empty(len(load))
for i in range((len(output))-2):
output[i] = load[i] load[i 1] load[i 2]
print(output)
輸出陣列如下所示:
array([31. , 34. , 39. , 53. , 65. , 76. , 79. , 78. , 72. , 66. , 60. ,
58. , 60. , 66. , 72. , 78. , 77. , 75. , 68. , 63. , 55. , 47. ,
6. , 4.5])
最后兩個數字不對。對于第 23 個元素,我希望只有 16 和 13 的總和,并且最后一個數字保持 13,因為陣列在那里結束。我不明白 python 是如何計算這些數字的。我也希望數字是沒有點的整數。
有沒有人有更好的解決方案?我知道這可能很容易解決,我只是不知道 numpy 的所有功能。
非常感謝!
uj5u.com熱心網友回復:
np.empty創建一個包含未初始化資料的陣列。在您的代碼中,您初始化了一個長度為 24 的陣列output,但只為其分配了 22 個值。最后 2 個值包含任意值(即垃圾)。除非性能很重要,否則np.zeros通常是初始化陣列的更好選擇,因為所有值都將具有一致的值 0。
您可以在不使用 for 回圈的情況下通過用零填充輸入陣列來解決此問題,然后計算矢量化總和。
import numpy as np
load = np.array([10, 12, 9, 13, 17, 23, 25, 28, 26, 24, 22, 20, 18, 20, 22, 24, 26, 28, 23, 24, 21, 18, 16, 13])
tmp = np.pad(load, [0, 2])
output = load tmp[1:-1] tmp[2:]
print(output)
輸出
[31 34 39 53 65 76 79 78 72 66 60 58 60 66 72 78 77 75 68 63 55 47 29 13]
uj5u.com熱心網友回復:
如果陣列不是超長,您可以使用:
output = [sum(x, y, z) for x, y, z in zip(load, load[1:], load[2:])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484202.html
上一篇:python如何運行回圈并在串列中追加專案,直到與舊串列的len匹配?
下一篇:numpy陣列之間的交叉參考
