以下意外失败:
# in a loop
.
try:
pressure_book[element] = c @ np.matrix([1] + point).T
except TypeError as e:
print(c, type(c), d.type)
print(point, type(point))
raise e
.
.
输出:
[[-1.52088384e+08 5.39161089e+03 9.08576658e+03 -3.23303777e-01]] <class 'numpy.matrixlib.defmatrix.matrix'> float64
[26088.6210156483, 17551.050000000003, 457882691.876694] <class 'list'>
Traceback (most recent call last):
File "C:/Users/evkouni/Desktop/PythonGIT/trials.py", line 111, in <module>
raise e
File "C:/Users/evkouni/Desktop/PythonGIT/trials.py", line 106, in <module>
pressure_book[element] = c @ np.matrix([1] + point).T
TypeError: Object arrays are not currently supported
但是,当我在控制台中尝试值时,它就可以正常工作。
>>> c = np.matrix([[-1.52088384e+08, 5.39161089e+03, 9.08576658e+03, -3.23303777e-01]])
>>> point = [26088.6210156483, 17551.050000000003, 457882691.876694]
>>> c @ np.matrix([1] + point).T
matrix([[849.00029883]])
任何想法可能是什么原因造成的?
编辑:似乎
np.matrix([1] + point).dtype
经过两次object
的迭代之后返回float64
在适当的情况下,我使用PyCharm 2018.3中的python 3.5,numpy 1.15.4进行运行
答案 0 :(得分:0)
似乎根据{sup> 1 point
所包含的内容,未指定numpy.matrix
到dtype
的转换可能会产生object
。
object
-dtype
数组\矩阵不支持矩阵乘法。
要解决此问题,必须这样指定dtype
:
c @ np.matrix([1] + point, dtype='float64').T
此外,numpy
声称不建议使用numpy.matrix
类,而应使用numpy.array
。
注意
不再建议使用此类,即使对于线性 代数而是使用常规数组。该类可以在 未来。
取自here
1 numpy
指出:“如果未指定[dtype],则该类型将被确定为将对象保留在序列中所需的最小类型。” < / em>