我有一个大小为(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循环就能做到这一点的方法呢?
另外,我想知道如果我想要A30,0作为:
A3[0,0] = [ [A1[0,0] A2[0,0]],
[B1[0,0] B2[0,0]] ]发布于 2014-05-11 12:17:01
你不可能得到你想要的一切。您希望使用numpy数组的优化(即避免for循环),但希望灵活地使M1和M2的每一行具有不同的形状。但在这种情况下,效率需要牺牲灵活性。
只需将M1和M2分解为不同的变量,每行一个变量。将这些称为M1a和M2a,M1b和M2b,....现在你可以创建真正的3Dnumpy数组了。
# 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循环。
我知道,你想把最后一个维度矢量化。但是,如果您想保持每行使用不同形状的灵活性,这是不可能的。抱歉的!没有免费的午餐。
https://stackoverflow.com/questions/20329927
复制相似问题