4
我有許多具有公共索引的不同大小的數組。Python,Numpy,在多維空間中添加數組的方法(廣播)
例如,
Arr1 = np.arange(0, 1000, 1).reshape(100, 10)
Arr2 = np.arange(0, 500, 1).reshape(100,5)
Arr1.shape = (100, 10)
Arr2.shape = (100, 5)
我想跟你一起加入到這些新的陣列,ARR3這是三維的。例如
Arr3 = Arr1 + Arr2
Arr3.shape = (100, 10, 5)
請注意,在這種情況下,這些值應該是全等的。
Arr3[10, 3, 2] = Arr1[10, 3] + Arr2[10, 2]
我一直在嘗試使用下面的方法
test = Arr1.copy()
test = test[:, np.newaxis] + Arr2
現在,我已經能夠將兩個方陣在一起的時候,使這項工作。
m = np.arange(0, 100, 1)
[x, y] = np.meshgrid(x, y)
x.shape = (100, 100)
test44 = x.copy()
test44 = test44[:, np.newaxis] + x
test44.shape = (100, 100, 100)
test44[4, 3, 2] = 4
x[4, 2] = 2
x[3, 2] = 2
但是,在我的實際計劃中,我不會爲此問題提供方形矩陣。 此外,此方法的內存密集程度非常高,如下所示開始向上移動維度數時會有所體現。
test44 = test44[:, :, np.newaxis] + x
test44.shape = (100, 100, 100, 100)
# Note this next command will fail with a memory error on my computer.
test44 = test44[:, :, :, np.newaxis] + x
所以我的問題有兩個部分:
- 是否有可能創建從與共同的兩個不同形狀的2D陣列的3D陣列「共享」軸線。
- 這樣的方法可以在更高階的維度上擴展嗎?
任何援助非常感謝。
因此,如果我想要做一個四維廣播,比如說Arr4 = Arr1 + Arr2 + Arr3,我需要首先將它們全部重新塑造成四個維度? – 2013-02-26 00:37:17
不僅僅是維度的數量,您應該弄清楚最終結果的形狀應該是什麼,並重新塑造輸入數組,以便它們可以廣播到最終形狀。例如,如果最終的形狀應該是(2,3,4,100),你可以試試:'Arr1.shape =(2,1,1,100); Arr1.shape =(1,3,1,100); Arr1.shape =(1,1,4,100)'。在這種情況下,您可以在技術上離開領先的1,但我希望將它們包含在內。 – 2013-02-26 19:28:08
非常感謝知道。我已經能夠成功播出,但是現在我開始轉向更高維度時遇到了內存問題,所以我想我可能需要開發一種不太「蠻力」的方法。儘管謝謝你的幫助。 – 2013-02-26 22:19:23