我想從特定索引開始添加兩個不同大小的 numpy 陣列。由于我需要對大型陣列執行這幾千次,因此這需要高效,而且我不確定如何在不遍歷每個單元格的情況下有效地執行此操作。
a = [5,10,15]
b = [0,0,10,10,10,0,0]
res = add_arrays(b,a,2)
print(res) => [0,0,15,20,25,0,0]
幼稚的方法:
# b is the bigger array
def add_arrays(b, a, i):
for j in range(len(a)):
b[i j] = a[j]
uj5u.com熱心網友回復:
您可以將較小的一個分配到零陣列然后添加,我會按照以下方式進行
import numpy as np
a = np.array([5,10,15])
b = np.array([0,0,10,10,10,0,0])
z = np.zeros(b.shape,dtype=int)
z[2:2 len(a)] = a # 2 is offset
res = z b
print(res)
輸出
[ 0 0 15 20 25 0 0]
免責宣告:我假設 offset len(a)總是小于或等于len(b)。
uj5u.com熱心網友回復:
你的方法沒有錯。您無法獲得更好的漸近時間或空間復雜度。如果你想減少代碼行(這本身不是目的),你可以使用切片分配和其他一些實用程式:
def add_arrays(b, a, i):
b[i:i len(a)] = map(sum, zip(b[i:i len(a)], a))
但是功能開銷應該會降低性能,如果有的話。
一些檔案:
mapsumzip
uj5u.com熱心網友回復:
它應該比 Daweo 的答案快 1.5-5 倍(取決于 a 和 b 之間的大小比例)。
result = b.copy()
result[offset: offset len(a)] = a
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355013.html
上一篇:以連續整數作為鍵的HashMap與ArrayList
下一篇:高負載資料更新架構
