解压缩一般数组的numpy数组形状

时间:2015-07-22 19:10:20

标签: python numpy

一个例子:

    >>> import numpy as np    
    >>> list = [1,2,3,4]
    >>> array = np.asarray(list)
    >>> np.shape(array)
    (4,)

现在说我想处理一个通用数组并分别将行数和列数读入变量mn,我会这样做:

>>> m, n = np.shape(array)

但这会导致错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

以上例子。在我上面的例子中,我认为m=1n = 4将是一个合适的结果。我错过了什么?

3 个答案:

答案 0 :(得分:5)

你的数组有ndim = 1,这意味着len(array.shape)==1。因此,您无法解压缩shape元组,就像它的长度== 2一样。

要将数组“拉伸”为2dim(如果当前数量较少),请使用np.atleast_2d

>>> x = np.arange(3.0)
>>> y = np.atleast_2d(x)
>>> y
array([[ 0.,  1.,  2.]])
>>> m, n = y.shape

BTW,listarray不是python中变量的好名字。

答案 1 :(得分:2)

你告诉我们:

>>> np.shape(array)
    (4,)

也就是说,它是一个元素元组。

m, n = (4,)

产生相同的错误。元组中有一个元素,因此Python只能将其解压缩为1个变量。这不是numpy问题。在进行这种解包时,变量的数量必须与元组(或列表)中的术语数相匹配。

如果您来自MATLAB,您可能希望所有阵列都是2d或更大。但是在numpy中,数组可以是1d甚至0d(形状为())。确保您的数组包含2个维度有多种方法:reshape,额外[][None,...]np.atleast_2d

答案 2 :(得分:1)

这是因为numpy将此数组处理为1D arraynp.shape返回此1D array的形状值,这是一个tuple,只有一个元素。
因此,我们可以将其更改为2D array并添加[],如[[1,2,3,4]]

您可以执行以下操作:

import numpy as np    

list = [[1,2,3,4]]
array = np.asarray(list)
print np.shape(array)
m, n = np.shape(array)
print m,n

<强>输出:

(1, 4)
1 4

或者你也可以这样做:

import numpy as np    

list = [1,2,3,4]
list = [list]
array = np.asarray(list)
print np.shape(array)
m, n = np.shape(array)
print m,n

<强>输出:

(1, 4)
1 4

我希望,这有帮助。

是的,你应该避免在Python中使用名称listarray作为变量名。