【发布时间】:2018-08-17 03:37:53
【问题描述】:
我想使用大型 Numpy 数组的某些部分。然而,Python 一直在抱怨,因为数组的这一小部分实际上并不是一个 Numpy 数组,而是一个列表。所以我调查了一下,发现 Numpy 实际上在大 Numpy 数组中存储了多个列表。这只发生在 Numpy 数组具有一定大小时。所以,我的问题是:
- numpy 为什么要这样做?
- 有没有办法防止这种情况,因此只有一个大的 Numpy 数组?
- 在 Numpy 开始执行此操作后,阈值大小是多少?
这里有两个不同的 Numpy 数组来澄清我的问题。第一个是标准的 Numpy 数组,第二个采用上面解释的内部多个列表的行为。
bigger_array = np.array([
[[[0.5, 0.05, 0.05, 0.05, 0.0, 0.0, 0.0, 0.0], [0.05, 0.5, 0.05, 0.05, 0.0, 0.0, 0.0, 0.0],
[0.05, 0.05, 0.5, 0.05, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.05, 0.5, 0.05, 0.05, 0.0, 0.0],
[0.0, 0.0, 0.05, 0.05, 0.5, 0.05, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.05, 0.5, 0.05, 0.05],
[0.0, 0.0, 0.0, 0.0, 0.05, 0.05, 0.5, 0.05], [0.0, 0.0, 0.0, 0.0, 0.05, 0.05, 0.05, 0.5]],
[[0.5, 0.05, 0.05, 0.05, 0.0, 0.0, 0.0, 0.0], [0.05, 0.5, 0.05, 0.05, 0.0, 0.0, 0.0, 0.0],
[0.05, 0.05, 0.5, 0.05, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.05, 0.5, 0.05, 0.05, 0.0, 0.0],
[0.0, 0.0, 0.05, 0.05, 0.5, 0.05, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.05, 0.5, 0.05, 0.05],
[0.0, 0.0, 0.0, 0.0, 0.05, 0.05, 0.5, 0.05], [0.0, 0.0, 0.0, 0.0, 0.05, 0.05, 0.05, 0.5]]],
[[[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125]],
[[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125]]],
[[[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125]],
[[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125]]]
])
smaller-array = np.array([
[[[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05],
[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]],
[[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05],
[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]]],
[[[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05],
[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05]],
[[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05],
[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05]]],
[[[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05],
[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05]],
[[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05],
[0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05], [0.5, 0.5, 0.5, 0.5, 0.05, 0.05, 0.05, 0.05]]]
])
print(type(bigger_array[0][0]))
print(type(smaller_array[0][0]))
【问题讨论】:
-
这不是整体大小的问题。重要的是列表的大小。如果它们不同,您将使用列表数组,而不是多维数组。检查
dtype。在分手的情况下它将是object。