我正在开发自定义回归分析例程,并遇到一个试图调用元组元素进行计算的问题:
EV = np.linalg.eig(xMe)
print EV
打印EV的结果如下:
(array([ 4.59554481e-02, 1.73592040e+04]), matrix([[-0.99977087, -0.02140571],
[ 0.02140571, -0.99977087]]))
这是一个元组。我需要访问元组中第一个数组中的每个元素(4.59554481e-02,1.73592040e + 04)。当我尝试使用:
转换元组时lEV = np.asarray(EV)
我收到以下错误:
ValueError Traceback (most recent call last)
<ipython-input-172-f46907801d9e> in <module>()
42 print EV
43
---> 44 lEV = np.asarray(EV)
462 return array(a, dtype, copy=False, order=order)
463
464 def asanyarray(a, dtype=None, order=None):
ValueError: could not broadcast input array from shape (2,2) into shape (2)
我是Python新手,可能有一种非常简单的方法可以访问这两个元素,但我无法弄明白。
答案 0 :(得分:1)
这样做的pythonic方法是使用元组解包:
>>> import numpy as np
>>> a = np.array([[0,17],[42,23]])
>>> eigenvalues, eigenvectors = np.linalg.eig(a)
>>> print eigenvalues
array([-17.59037642, 40.59037642])
>>> print eigenvectors
array([[-0.69493692, -0.38630591],
[ 0.71907071, -0.92237072]])
这允许您将元组的两个项目解压缩为两个变量。 在这些变量上,您现在可以使用标准for循环:
>>> for value in eigenvalues:
... print(value)
-17.5903764156
40.5903764156
或者(如果您知道将获得多少值),您可以再次使用元组解包:
>>> ev_1, ev_2 = eigenvalues
>>> print ev_1
-17.5903764156
>>> print ev_2
40.5903764156