[英]numpy array of numpy arrays of numpy arrays
我有一個大小為(2x3)的numpy對象數組。 讓我們稱之為M1
。 在M1
,有6個numpy數組。 M1的給定行中的陣列形狀相同,但不同於M1
任何其他行中的陣列形狀。
那是,
M1 = [ [A1 B1 C1]
[D1 E1 F1] ]
A1,B1,C1,D1,E1,F1是二維numpy數組。 A1,B1和C1的形狀相同。 D1,E1,F1的形狀相同。 Shape of A1 != D1
,依此類推。
同樣,我有
M2 = [ [A2 B2 C2]
[D2 E2 F2] ]
現在我想要一個與M1形狀相同的numpy數組M3。
M3 = [ [A3 B3 C3]
[D3 E3 F3] ]
其中A3[0,0] = [A1[0,0] A2[0,0]]
, A3[0,1] = [A1[0,1] A2[0,1]]
,依此類推。 (M3的所有元素都是這樣)
有沒有使用for循環的pythonic方法嗎?
另外,我想知道如果我希望將A3 [0,0]設置為:
A3[0,0] = [ [A1[0,0] A2[0,0]],
[B1[0,0] B2[0,0]] ]
您無法獲得想要的一切。 您想使用numpy數組的優化(也就是說,要避免for-loops),但是要靈活地使M1和M2的每一行具有不同的形狀。 但是在這種情況下,效率需要犧牲靈活性。
只需將M1和M2分成不同的變量,每一行一個。 將這些稱為M1a和M2a,M1b和M2b,...。現在,您可以創建真正的3d numpy數組。
# building blocks ... like your A1, B1, etc
I2 = np.eye(2, dtype=np.int)
# First row of M1
M1a = np.array([I2, 2*I2, 3*I2])
# First row of M2
M2a = -M1a.copy()
# Stick them together such that M3a[0,0] = [M1a[0,0], M2a[0,0]]
M3a = np.transpose([M1a, M2a])
現在,使用具有不同形狀I3 = np.eye(3)
的構造塊對M1b,M2b,M3b行執行相同的操作。 因此,僅在最后一個維度上有一個for循環。
我知道,您想向量化最后一個維度。 但是,如果您想保持每行使用不同形狀的靈活性,那是不可能的。 抱歉! 沒有免費的午餐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.