Numpy的“shape”函数返回二维数组的一维值
所以我创建了这个数组作为例子:
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]])
我想创建一个二维数组。因此,例如在这种情况下,15*5 数组。
但是,当我使用 时a.shape,它返回(15,)
我的数组定义有什么问题?
回答
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
快速演示——
#Variable length sublists
print(np.array([[1,2,3], [4,5]]))
#Fixed length sublists
print(np.array([[1,2,3], [4,5,6]]))
array([list([1, 2, 3]), list([4, 5])], dtype=object) #This is (2,)
array([[1, 2, 3], #This is (2,3)
[4, 5, 6]])
- 您可能想要做的是固定每个子列表中的元素数量。
- 或者你可能想对你的数组做一些填充。