【问题标题】:How do I make a matrix from multiple lists of matrices?如何从多个矩阵列表中创建一个矩阵?
【发布时间】:2021-09-18 13:00:59
【问题描述】:

您好,我想弄清楚如何从其他矩阵创建矩阵。 我从某些计算中创建了 3 个矩阵,并且每个矩阵都达到了 3 个形状 (1200,3) 的矩阵。 1200 表示数据集的行数。我想从每个矩阵(A、B、C)中提取的内容是按此顺序排列 1200 个数据点中的第一个:

[[A[0][0], B[0][0], C[0][0]],    
 [A[0][1], B[0][1], C[0][1]],    
 [A[0][2], B[0][2], C[0][2]]]

这是我目前所写的:

def getRotationMatrix(acc_x_sample, acc_y_sample, acc_z_sample, mag_x_sample, mag_y_sample, mag_z_sample):
    a = np.transpose(np.array([acc_x_sample,acc_y_sample,acc_z_sample]))
    m = np.transpose(np.array([mag_x_sample,mag_y_sample,mag_z_sample]))

    B = np.cross(a,m) # (a x m)
    A = np.cross(B,a) 
    C = a

    R =[]
    for i in range(2):
        R.append(A[i],B[i],C[i])
    return R

【问题讨论】:

  • 澄清一下,您是否想要一个形状为 (1200, 3,3) 的输出数组,其中形状 (1,3,3) 的每个项目都与您在问题中显示的一样?
  • 您可以考虑使用np.stack

标签: python for-loop matrix


【解决方案1】:

这似乎是 np.stack 的工作,它可以用来做那件事

result = np.stack([A, B, C], axis=2);

您可以根据要合并它们的方式更改轴的值。

【讨论】:

  • 对于问题轴中看到的输出应该是 2,但与我的答案相比,这是一种更简洁的方法
  • 谢谢,我马上更新。
  • 是的!但这很好用!
【解决方案2】:

实现此目的的一种方法如下:

np.c_[A,B,C].reshape((-1,3,3)).transpose((0,2,1))

首先,将三个数组堆叠(作为列),生成一个形状为 (1200,9) 的数组。然后,将其重塑为所需的 (1200,3,3) 形状,最后,转置最后两个维度,以便嵌套二维数组中的每一列来自 ABC

示例输入:

A = np.array([[1,2,3],[4,5,6]])
B = np.array([[-1,-2,-3],[-4,-5,-6]])
C = np.array([[11,12,13],[14,15,16]])
np.c_[A,B,C].reshape((-1,3,3)).transpose((0,2,1))

输出:

array([[[ 1, -1, 11],
        [ 2, -2, 12],
        [ 3, -3, 13]],
       [[ 4, -4, 14],
        [ 5, -5, 15],
        [ 6, -6, 16]]])

【讨论】:

    【解决方案3】:

    其他答案可能已经足以让您发挥作用,但这里有一个小功能可以满足您的需求(据我所知):

    def new_mat(*arrs):
        
        combined =  np.concatenate([arrs])
        
        return combined[:,0,:].T
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-14
      • 2020-02-05
      • 1970-01-01
      • 2019-09-04
      • 2021-11-16
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多