我有一个大小(2x3)的numpy对象数组 . 让我们称之为 M1
. 在 M1
中有6个numpy数组 . M1给定行中的数组形状相同,但与 M1
的任何其他行中的数组形状不同 .
那是,
M1 = [ [A1 B1 C1]
[D1 E1 F1] ]
A1,B1,C1,D1,E1,F1是2D numpy阵列 . A1,B1和C1的形状相同 . D1,E1,F1的形状相同 . Shape of A1 != D1
等等 .
我也一样
M2 = [ [A2 B2 C2]
[D2 E2 F2] ]
现在我想要一个numpy数组M3,其形状与M1相同 .
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]] ]
1 回答
你无法得到你想要的一切 . 您希望使用numpy数组的优化(也就是说,您希望避免for循环),但是您希望灵活地让M1和M2的每一行具有不同的形状 . 但效率需要在这种情况下牺牲灵活性 .
只需将M1和M2分成不同的变量,每行一个 . 调用这些M1a和M2a,M1b和M2b,......现在你可以创建真正的3d numpy数组 .
现在使用不同形状的构造块
I3 = np.eye(3)
对行M1b,M2b,M3b执行相同的操作 . 所以你只有最后一个维度的for循环 .我知道,你想要矢量化最后一个维度 . 但是如果你想保持每行使用不同形状的灵活性,这是不可能的 . 抱歉!没有免费的午餐 .