最近我遇到了几个由于numpy数组形状为(x,)而导致的bug - 可以通过下面的代码片段轻松修复
a = np.array([1,2,3,4]) #this form produced a bug
a.shape
>>> (4,)
a.shape = [4,1] #but this change fixed it
但这让我想知道,为什么(x,)是1D数组的默认形状?
shape
的元组中每个项目表示一个轴。 如果您只有一个项目,意味着您的数组是1维(1个轴),否则它将是2D数组。 当您执行a.shape = [4,1]
时,您只是将1D数组转换为2D数组:
In [26]: a = np.array([1,2,3,4])
In [27]: a.shape = [4,1]
In [28]: a.shape
Out[28]: (4, 1)
In [29]: a
Out[29]:
array([[1],
[2],
[3],
[4]])
从文档中引用:
shape : tuple of ints
形状元组的元素给出了相应数组维度的长度。
因此,当您拥有形状为(4, )
时,这意味着它的第一个维度中有4个元素。从您的示例中可以看出,这是有意义的,对吧?
相反,如果我们拥有您所说的形状(4, 1)
,那么它意味着第一维(在NumPy术语中为轴=1)有4个元素,第二维(在NumPy术语中为轴=0)中有1个元素,但这不适用于1D数组。
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr)
>> [1 2 3 4]
print(arr[0])
>> 1
arr.shape = [4, 1]
print(arr)
>> [[1]
>> [2]
>> [3]
>> [4]]
print(arr[0])
>> [1]
arr.shape = [1, 4]
print(arr)
>> [[1 2 3 4]]
print(arr[0])
>> [1 2 3 4]
(x, 1)
或(1, x)
是2D数组。它们有两个维度,其中一个设置为1。你能更具体地描述你遇到了什么类型的bug吗?我怀疑这些bug实际上可能是特性 :) - MB-F