Python 为常规阵列解包numpy阵列形状
例如:Python 为常规阵列解包numpy阵列形状,python,numpy,Python,Numpy,例如: >>> import numpy as np >>> list = [1,2,3,4] >>> array = np.asarray(list) >>> np.shape(array) (4,) 现在假设我要处理一个常规数组,并将行数和列数分别读入变量m和n,我将执行以下操作: >>> m, n = np.shape(array) 但这会导致错误:
>>> import numpy as np
>>> list = [1,2,3,4]
>>> array = np.asarray(list)
>>> np.shape(array)
(4,)
现在假设我要处理一个常规数组,并将行数和列数分别读入变量m
和n
,我将执行以下操作:
>>> m, n = np.shape(array)
但这会导致错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包
例如上面的例子。在我上面的例子中,我认为
m=1
和n=4
应该是一个合适的结果。我缺少什么?您的数组具有ndim=1,这意味着len(array.shape)==1
。因此,您无法将形状
元组解压为长度==2
若要“拉伸”阵列使其具有2dim,以防其当前具有较少的2dim,请使用
顺便说一句,
list
和array
在python中不是变量的好名称。这是因为numpy将此数组处理为1D array
和np。shape
返回此1D array
的shape值,它是一个带有单个元素的元组。
因此,我们可以通过添加[]like[[1,2,3,4]]
将其更改为2D数组
您可以执行以下操作:
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
(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
(1, 4)
1 4
我希望,这会有帮助
是的,您应该避免使用名称list
和array
作为Python中的变量名。您向我们展示了:
>>> np.shape(array)
(4,)
也就是说,它是一个单元素元组
m, n = (4,)
产生相同的错误。元组中只有一个元素,因此Python只能将其解压为一个变量。这不是一个numpy
问题。进行这种解包时,变量的数量必须与元组(或列表)中的术语数量相匹配
如果您来自MATLAB,您可能希望所有阵列都是2d或更大。但在numpy中,数组可以是1d甚至0d(形状()
)。有多种方法可以确保您的阵列具有二维-重塑
、额外的[]
、[无,…]
、np。至少\u 2d
谢谢。你能解释一下为什么额外的[]会有不同吗?因为numpy将数组处理为1D数组,np.shape返回此1D数组的shape值,当添加[]时,我们创建了一个2D数组。很好,这很有意义-+1感谢你的努力和良好的解释。谢谢你,我很高兴帮助你。但是,您没有接受这个答案。:)