【问题标题】:Matrix become (3,) instead of (6,3) in Python NumpyPython Numpy 中的矩阵变为 (3,) 而不是 (6,3)
【发布时间】:2017-04-26 08:18:07
【问题描述】:
BPC=[BRad.*cos(BC)' BRad.*sin(BC)' zeros(1,6)']

这是我转换成 Python 的 MATLAB 代码:

BPC=np.transpose(np.array([BRad * np.cos(BC),BRad * np.sin(BC),np.zeros((1,6))]))

MATLAB 给出一个 (6,3) 矩阵,Python 给出一个 (3,) 矩阵。是什么原因造成的?

【问题讨论】:

  • BC,BRad 是什么?使用最少的样本数据重现问题。
  • 也许np 矩阵是(3,) 向量的向量,每个向量的形状为(6,)
  • 在外部np.array调用的末尾添加dtype=float,你会得到更有用的错误信息
  • BC 和 BRad 局部变量 @Divakar

标签: python matlab numpy matrix


【解决方案1】:

您似乎得到了一个包含三个元素的向量,前两个是包含六个元素的向量,最后一个是包含 1x6 个元素的矩阵。 Numpy 无法将它们“展平”为单个矩阵。

>>> BRad = 1
>>> BC = np.array([1,2,3,4,5,6])
>>> np.transpose(np.array([BRad * np.cos(BC), BRad * np.sin(BC), np.zeros((1,6))]))
array([ array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362,  0.28366219,
        0.96017029]),
       array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 , -0.95892427,
       -0.2794155 ]),
       array([[ 0.,  0.,  0.,  0.,  0.,  0.]])], dtype=object)

试试np.zeros((1,6)),而不是np.zeros(6)

>>> np.transpose(np.array([BRad * np.cos(BC), BRad * np.sin(BC), np.zeros(6)]))
array([[ 0.54030231,  0.84147098,  0.        ],
       [-0.41614684,  0.90929743,  0.        ],
       [-0.9899925 ,  0.14112001,  0.        ],
       [-0.65364362, -0.7568025 ,  0.        ],
       [ 0.28366219, -0.95892427,  0.        ],
       [ 0.96017029, -0.2794155 ,  0.        ]])

【讨论】:

  • 请注意,numpy 内部有各种讨论关于最终禁用 object-array-as-fallback 行为 - 这将导致原始代码引发显式错误,而不是做一些令人惊讶的事情跨度>
猜你喜欢
  • 2018-07-18
  • 2021-11-12
  • 2019-04-07
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2019-08-30
  • 2017-09-26
  • 2017-06-22
相关资源
最近更新 更多