И обратная связь:
...: fun(data[:,0],data[:,1])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-262-144f145bebe5> in <module>
10
11
---> 12 fun(data[:,0],data[:,1])
<ipython-input-262-144f145bebe5> in fun(x, y)
5 f1 = np.sin(x)*np.cos(y)
6 f2 = np.cos(x)*np.sin(y)
----> 7 eig1 = f1*np.mat([[f1],[f2]])
8 eig2 = f2*np.mat([[f2+f1],[f1]])
9 return np.sum(np.linalg.eig(eig1*eig2.T)[0])
/usr/local/lib/python3.6/dist-packages/numpy/matrixlib/defmatrix.py in asmatrix(data, dtype)
69
70 """
---> 71 return matrix(data, dtype=dtype, copy=False)
72
73
/usr/local/lib/python3.6/dist-packages/numpy/matrixlib/defmatrix.py in __new__(subtype, data, dtype, copy)
149 shape = arr.shape
150 if (ndim > 2):
--> 151 raise ValueError("matrix must be 2-dimensional")
152 elif ndim == 0:
153 shape = (1, 1)
ValueError: matrix must be 2-dimensional
Таким образом, проблема заключается в вводе функции np.mat
. Что это?
In [263]: data.shape
Out[263]: (360000, 2)
Вызовы sin / cos не меняют форму, поэтому:
In [264]: [[data[:,0]],[data[:,1]]]
Out[264]:
[[array([-0.95915424, 1.38013956, 1.26480082, ..., 1.34129623,
1.14664781, 0.90385798])],
[array([-0.77785621, 0.695089 , 1.17894725, ..., -0.2891861 ,
0.47051436, -0.22550854])]]
In [265]: np.array([[data[:,0]],[data[:,1]]])
Out[265]:
array([[[-0.95915424, 1.38013956, 1.26480082, ..., 1.34129623,
1.14664781, 0.90385798]],
[[-0.77785621, 0.695089 , 1.17894725, ..., -0.2891861 ,
0.47051436, -0.22550854]]])
In [266]: _.shape
Out[266]: (2, 1, 360000)
Итак, вы пытаетесь дать np.mat
трехмерный массив.
np.mat
работает, если я опущу []:
In [274]: np.mat([data[:,0],data[:,1]]).shape
Out[274]: (2, 360000)
но f1*np.mat([f1,f2])
имеет проблему с матричным произведением:
In [275]: data[:,0]*np.mat([data[:,0],data[:,1]])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-275-555ec143af3f> in <module>
----> 1 data[:,0]*np.mat([data[:,0],data[:,1]])
/usr/local/lib/python3.6/dist-packages/numpy/matrixlib/defmatrix.py in __rmul__(self, other)
224
225 def __rmul__(self, other):
--> 226 return N.dot(other, self)
227
228 def __imul__(self, other):
ValueError: shapes (360000,) and (2,360000) not aligned: 360000 (dim 0) != 2 (dim 0)
Производя np.mat
, *
теперь является dot
продуктом, а не поэлементным продуктом.