numpy矩阵乘法引发奇怪的错误

时间:2019-01-24 16:17:14

标签: python python-3.x numpy matrix-multiplication

以下意外失败:

# 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进行运行

1 个答案:

答案 0 :(得分:0)

似乎根据{sup> 1 point所包含的内容,未指定numpy.matrixdtype的转换可能会产生object

object-dtype数组\矩阵不支持矩阵乘法。

要解决此问题,必须这样指定dtype

c @ np.matrix([1] + point, dtype='float64').T

此外,numpy声称不建议使用numpy.matrix类,而应使用numpy.array

  

注意

     

不再建议使用此类,即使对于线性   代数而是使用常规数组。该类可以在   未来。

取自here


1 numpy指出:“如果未指定[dtype],则该类型将被确定为将对象保留在序列中所需的最小类型。” < / em>