[英]AttributeError: 'Series' object has no attribute 'as_matrix' Why is it error?
[英]Why is the .as_matrix() call causing an error while computing the cross product?
誰能闡明為什么此數組值分配會導致numpy.cross()錯誤?
假設dfAnalysis是一個熊貓數據框,其中包含x_rel,y_rel和z_rel作為列標簽,並以float值作為其數據類型條目。
像下面的代碼片段一樣從中提取數據時...
A = dfAnalysis.iloc[0][['x_rel','y_rel','z_rel']].as_matrix()
B = dfAnalysis.iloc[1][['x_rel','y_rel','z_rel']].as_matrix()
我收到以下錯誤:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-f153b94e791d> in <module>()
7 B = dfAnalysis.iloc[1][['x_rel','y_rel','z_rel']].as_matrix()
8
----> 9 np.cross(A,B)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/core/numeric.py in cross(a, b, axisa, axisb, axisc, axis)
1819 cp0 -= tmp
1820 multiply(a2, b0, out=cp1)
-> 1821 multiply(a0, b2, out=tmp)
1822 cp1 -= tmp
1823 multiply(a0, b1, out=cp2)
TypeError: ufunc 'multiply' output (typecode 'O') could not be coerced to provided output parameter (typecode 'd') according to the casting rule ''same_kind''
如果兩個數組是這樣構建的,則錯誤已修復,但是我不明白為什么。 有人可以解釋嗎?
A = np.array([dfAnalysis.iloc[0]['x_rel'],
dfAnalysis.iloc[0]['y_rel'],
dfAnalysis.iloc[0]['z_rel']])
B = np.array([dfAnalysis.iloc[1]['x_rel'],
dfAnalysis.iloc[1]['y_rel'],
dfAnalysis.iloc[1]['z_rel']])
np.cross(A,B)
熊貓代碼正在將A
和B
創建為具有數據類型object
numpy數組,而不是浮點值的數組:
In [168]: A = df.iloc[0][['x_rel', 'y_rel', 'z_rel']].as_matrix()
In [169]: A
Out[169]: array([213.86051031592066, 127.52721826173365, 14.120000000000005], dtype=object)
object
類型的numpy數組是包含任意python對象的數組。 在這種情況下,對象本身就是浮點值,因此數組在外觀和行為上都類似於浮點數組。 但是,許多numpy函數(包括cross
)無法處理對象數組。 解決此問題的一種方法是使用astype()
方法將數組的數據類型轉換為numpy.float64
:
In [170]: a = A.astype(np.float64)
In [171]: a
Out[171]: array([ 213.86051032, 127.52721826, 14.12 ])
In [172]: b = B.astype(np.float64)
In [173]: b
Out[173]: array([ 213.70062319, 127.21119974, 14.12 ])
In [174]: np.cross(a, b)
Out[174]: array([ 4.46218149, -2.25760625, -47.19392108])
一種替代方法是僅使用相關列來創建數組:
In [193]: rel = df[['x_rel', 'y_rel', 'z_rel']].as_matrix()
In [194]: rel.dtype
Out[194]: dtype('float64')
In [195]: np.cross(rel[0], rel[1])
Out[195]: array([ 4.46218149, -2.25760625, -47.19392108])
直接從導入的csv使用as_matrix()
使用as_matrix()
對象轉換矩陣。
>>> A = dfAnalysis.iloc[0][['x_rel','y_rel','z_rel']].as_matrix() # extract entry as numpy array
>>> B = dfAnalysis.iloc[1][['x_rel','y_rel','z_rel']].as_matrix()
>>> A
array([213.86051031592066, 127.52721826173365, 14.120000000000005], dtype=object)
如下更改您的行,將其轉換為float64:
>>> A = pd.to_numeric(dfAnalysis.iloc[0][['x_rel','y_rel','z_rel']]).as_matrix()
>>> B = pd.to_numeric(dfAnalysis.iloc[1][['x_rel','y_rel','z_rel']]).as_matrix()
>>> B
array([ 213.70062319, 127.21119974, 14.12 ])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.