首页 文章

numpy数组numpy数组的numpy数组

提问于
浏览
1

我有一个大小(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 回答

  • 2

    你无法得到你想要的一切 . 您希望使用numpy数组的优化(也就是说,您希望避免for循环),但是您希望灵活地让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循环 .

    我知道,你想要矢量化最后一个维度 . 但是如果你想保持每行使用不同形状的灵活性,这是不可能的 . 抱歉!没有免费的午餐 .

相关问题