Numpy 的“shape”函数返回二维数组的一维值

Kad*_*j13 2 python arrays numpy multidimensional-array python-3.x

所以我创建了这个数组作为例子:

a = np.array([[1, 1, 1, 1, 2], [2, 2, 2, 3], [3, 3, 3, 4], [13, 49, 13, 49], [10, 10, 2, 2],
             [11, 1, 1, 1, 2], [22, 2, 2, 3], [33, 3, 3, 4], [133, 49, 13, 49], [100, 10, 2, 2],
             [5, 1, 1, 1, 2], [32, 2, 2, 3], [322, 3, 3, 4], [13222, 49, 13, 49], [130, 10, 2, 2]])
Run Code Online (Sandbox Code Playgroud)

我想创建一个二维数组。因此,例如在这种情况下,15*5 数组。

但是,当我使用 时a.shape,它返回(15,)

我的数组定义有什么问题?

Aks*_*gal 5

Tl;博士。您的各个列表的长度可变,因此迫使您的 NumPy 数组成为列表对象的一维数组,而不是整数/浮点数的二维数组

Numpy 数组只能在每个轴具有相同数量的元素时定义。否则,您将得到一个一维对象数组。

在此处输入图片说明

这就是您的阵列发生的情况。您有一个列表列表,其中包含可变数量的元素(有些是 4 个,有些是 5 个)。这在转换过程(15,)中将它变成一个numpy 数组,其中数组有 15 个单独的列表对象。

a = np.array([[1, 1, 1, 1, 2], [2, 2, 2, 3], [3, 3, 3, 4], [13, 49, 13, 49]
##           |______________|  |__________|
##                   |               |
##            5 length            4 length
Run Code Online (Sandbox Code Playgroud)

快速演示——

#Variable length sublists
print(np.array([[1,2,3], [4,5]]))

#Fixed length sublists
print(np.array([[1,2,3], [4,5,6]]))
Run Code Online (Sandbox Code Playgroud)
array([list([1, 2, 3]), list([4, 5])], dtype=object)  #This is (2,)

array([[1, 2, 3],                    #This is (2,3)
       [4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)
  1. 您可能想要做的是固定每个子列表中的元素数量。
  2. 或者你可能想对你的数组做一些填充