2017-09-13 65 views
0

這是我的代碼如下:將'numpy.ndarray'轉換爲float64在Python中失敗?

a = np.array([[1,2,3]]) 
b = np.array([[2,2,2]]) 
x = np.dot(b,a.T) 
print(type(x)) 

這給我'numpy.ndarray',我想轉換'numpy.ndarray'到float64:

x = x.astype(np.float64) 
print(type(x)) 

但它返回'numpy.ndarray',爲什麼不起作用?

+1

但是'x'是3x3矩陣。你會如何將它轉換成浮動狀態? 'astype'轉換矩陣的*元素*。 –

+0

如果我得到1x1'numpy.ndarray',我怎麼能將它轉換爲float64? – freefrog

+0

請參閱下面的答案。 –

回答

1

簡短的回答:你可能想使用float(np.dot(a,b.T))

np.dot生成3 × 3矩陣:

>>> np.dot(a.T,b) 
array([[2, 2, 2], 
     [4, 4, 4], 
     [6, 6, 6]]) 

而且有一個矩陣轉換爲浮動(當然你也可以計算實例的決定沒有通用的固有方式,但這是a轉換)。

你可能想使用np.dot其他各地的道:

>>> np.dot(a,b.T) 
array([[12]]) 

現在是一個1 × 1矩陣。這裏簡單地將元素彈出矩陣當然是合理的。我們可以通過索引做到這一點:

>>> np.dot(a,b.T)[0,0] 
12 
>>> type(np.dot(a,b.T)[0,0]) 
<class 'numpy.int64'> 

所以,現在我們獲得的單in64元素。這還不是一個浮動,但現在我們可以使用float構造的Python獲得浮動:

>>> float(np.dot(a,b.T)[0,0]) 
12.0 
>>> type(float(np.dot(a,b.T)[0,0])) 
<class 'float'> 

現在最好的部分是,萬一矩陣只包含一個元素,numpy的使它更方便,並且您可以簡單地在矩陣上呼叫float(..)。所以:

>>> float(np.dot(a,b.T)) 
12.0 

如果你想使用np.float64,這或多或少是一樣的:

>>> np.float64(np.dot(a,b.T)) 
12.0 
>>> type(np.float64(np.dot(a,b.T))) 
<class 'numpy.float64'> 
+0

感謝您的回答,它可以幫助我很多 – freefrog

+0

值得一提的是,Numpy的做法可能是使用內置函數'item'。只是在做:'np.dot(b,a.T).item()'會返回'12',但如果真的需要float,調用'np.float54'更適合。 –