为一般数组解包numpy数组形状

  • 本文关键字:数组 numpy 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是合适的结果。我错过了什么?

你的数组有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

顺便说一句,listarray在python中不适合作为变量名。

你向我们展示了:

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

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

m, n = (4,)

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

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

这是因为numpy将此数组处理为1D array,而np.shape返回此1D array的shape值,这是一个具有单个元素的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作为变量名。

最新更新