将元组转换为数组并调用新数组

时间:2015-09-18 03:23:10

标签: python arrays numpy tuples

我正在开发自定义回归分析例程,并遇到一个试图调用元组元素进行计算的问题:

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新手,可能有一种非常简单的方法可以访问这两个元素,但我无法弄明白。

1 个答案:

答案 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