我正在尝试将矩阵中的元素转换为浮点数,希望输出为0.200,而不是0.2 ?(作为数值精度是不一样的,在Matlab中,例如,它会影响我想要什么结果?当我尝试float()时,我得到了以下错误:TypeError:只有size-1的数组可以转换为Python标量">
任何帮助,我附上了代码:
import numpy as np
A=np.array([[ 0.0186428, -0.0056, -0.0056, 0, 0,
0],
[-.1263, 0.42087542, -.1263, 0, 0,
0],
[-.1263, -.1263, 0.42087542, 0, 0,
0],
[0, 0, 0, 0.2, -0,
0 ],
[ 0, 0, 0, -0, 0.2,
0 ],
[-0, -0, 0, 0, 0,
0.2 ]])
B=np.array([[1,0,0,0,0,0],[0,1,0,0,0,0],[0,0,1,0,0,0],[0,0,0,1,0,0],[0,0,0,0,1,0],
[0,0,0,0,0,1]])
C=B*A*B # float(C) NOT working ?
print(C)
您的变量C
已经是具有浮点值的numpy数组。您可以通过打印
In [23]: C.dtype
Out[23]: dtype('float64')
如果您想更改numpy数组打印到控制台的方式,您可以使用np.set_printoptions
编辑设置。例如:
In [21]: np.set_printoptions(precision=3, floatmode='fixed')
In [22]: C
Out[22]:
array([[ 0.019, -0.000, -0.000, 0.000, 0.000, 0.000],
[-0.000, 0.421, -0.000, 0.000, 0.000, 0.000],
[-0.000, -0.000, 0.421, 0.000, 0.000, 0.000],
[ 0.000, 0.000, 0.000, 0.200, 0.000, 0.000],
[ 0.000, 0.000, 0.000, 0.000, 0.200, 0.000],
[ 0.000, 0.000, 0.000, 0.000, 0.000, 0.200]])
- 3的
precision
设置要打印的值,精度为三位 'fixed'
的floatmode
表示:
始终精确打印小数位数,即使这样做输出多于或少于指定值所需的数字独特。
乘法注意事项
根据你的评论,似乎你想要实现的是矩阵A
和B
的矩阵乘法。*运算符是逐元素的乘法。对于矩阵乘法,您需要使用np.matmul(np.matmul(B,A), B)
。
float
是内置函数,它应该返回单个浮点数,所以当你输入数字数组时遇到错误,你应该使用.astype
方法,即:
import numpy as np
arr = np.array([1,2,3])
arr2 = arr.astype(float)
print(arr2)
输出[1. 2. 3.]
(注.
s在数字后)
正如在另一个答案中指出的那样,使用c.s astype(float)进行转换。
如果你想打印3位小数,使用set_printoptions:
np.set_printoptions(precision=3)
print(C)
可以使用np.around()来四舍五入/设置数组的精度,使用np.set_printoptions:
打印设置...
A = np.around(A, 3)
B = np.around(B, 3)
C=B*A*B
np.set_printoptions(precision=3, floatmode="fixed")
print(C)