2017-04-26 25 views
2
BPC=[BRad.*cos(BC)' BRad.*sin(BC)' zeros(1,6)'] 

這裏是我的MATLAB代碼,我轉換成Python:矩陣成爲(3),而不是(6,3)在Python NumPy的

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

MATLAB給出了(6,3)矩陣和Python給出了一個(3)矩陣。這是什麼原因?

+0

什麼'BC','BRad'?使用最少的樣本數據來重現問題。 – Divakar

+1

也許'np'矩陣是'(3,)'向量的向量,每個向量的形狀爲'(6,)'? –

+0

在外部'np.array'調用的末尾添加'dtype = float',你會得到一個更有用的錯誤信息 – Eric

回答

2

看起來你似乎得到了三個元素的向量,前兩個元素是具有六個元素的向量,最後一個具有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.  ]]) 
+1

請注意,在numpy中有關於最終禁用''object''-array-的各種討論回落行爲 - 這會導致原始代碼引發明顯的錯誤,而不是做出令人驚訝的事情 – Eric