簡體   English   中英

numpy數組numpy數組numpy數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM