在Python中将'numpy.ndarray'转换为float64失败?

时间:2017-09-13 16:53:32

标签: 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 个答案:

答案 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 转换)。< / p>

您可能希望以相反的方式使用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元素。这仍然不是浮点数,但现在我们可以使用Python的float构造函数来获取浮点数:

>>> 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'>