You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多个矩阵列表构造目标矩阵?三个形状为(1200,3)的矩阵按规则拼接

原有代码问题

  • 循环遍历范围错误:range(2)仅会处理前2个样本,需要遍历全部1200个样本
  • 列表操作语法错误:append方法一次只能接收1个参数,传入3个参数会直接抛出参数数量异常

实现方案

方案1:修正原有循环写法

import numpy as np

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(len(A)):
        # 按规则拼接单样本的3x3矩阵
        single_R = np.column_stack([A[i], B[i], C[i]])
        R.append(single_R)
    # 转换为numpy数组返回,最终形状为(1200,3,3)
    return np.array(R)

方案2:高性能向量化实现(无循环,推荐大数据量使用)

直接利用numpy的维度堆叠能力,一步生成目标结构,比循环写法效率高1~2个数量级:

import numpy as np

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

    # 沿最后一维堆叠,直接输出形状为(1200,3,3)的结果
    return np.stack([A, B, C], axis=-1)

两种方案输出的结果完全一致,取第i个样本对应的3x3矩阵直接用R[i]即可。

内容的提问来源于stack exchange,提问作者Clarence Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:02