如何从多个矩阵列表中创建一个矩阵?

3

大家好,我正在试图弄清楚如何从其他矩阵创建一个矩阵。 我通过某些计算创建了3个矩阵,并得到了每个矩阵形状为(1200, 3)的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)的项都像您在问题中展示的那样? - Gilad Green
你可能想考虑使用 np.stack - Mohamed abdelmagid
3个回答

5
这似乎是np.stack的工作,它可以用来实现这一点。
result = np.stack([A, B, C], axis=2);

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

1
为了得到问题中所见的输出,轴应该是2,但与我的答案相比,这是一种更清晰的方法。 - Gilad Green
谢谢,我会立即更新它。 - Mohamed abdelmagid
是的!但这很有效! - Clarence Chan

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]]])

1
其他答案可能已经足够让您使其工作,但这里有一个小函数可以做到您想要的(据我理解):
def new_mat(*arrs):
    
    combined =  np.concatenate([arrs])
    
    return combined[:,0,:].T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接