打印ndarray对象似乎比缩进ndarray本身产生不同的结果。
在我的代码中,我采用了一个128x128元素的ndarray,该元素主要包含零,但包含一些非平凡的数字,并以两种不同的方式将它们打印出来。我第一次使用
print(array[:][32])
第二次我用过
print(array[33][32])
尝试查找33个元素的值。
使用前一种方法执行此操作时,在元素33,32处获得0。有了后者,我得到了23。关于如何使用ndarrays,我是否缺少微妙之处?
答案 0 :(得分:1)
这取决于33元素值的含义。在这里,您处理一个2D矩阵。
请注意,为简单起见。我会说(x + 1)行的第xth行
在第二种情况下,您将元素放在33rd row
和32th column
中,它等效于array[33,32]
在第一种情况下,您将返回第32行。
要注意的重要一点是,您在这里进行链索引编制。
array[:,32]
(将返回第32列的所有值)不等同于array[:][32]
,后者将首先返回您的数组,然后显示第32行。
答案 1 :(得分:0)
不要像您正在做的那样对二维数组进行“两次”索引,这不是Numpy的正确语法。而是:
print(array[:, 32])
或
print(array[33, 32])
取决于您要实际提取的值。顶部的print
声明为您提供数组的32
列(在您的情况下,该列应为形状为(128,)
的一维数组),而后面的print
语句应为只需在行33
的列32
上给您一个值即可。
array[:][32]
array[:]
仅返回整个数组。因此,array[:][32]
等效于仅调用array[32]
。这将返回32
的第0
行(从array
开始),在您的情况下,该行应包含128
值。 array[33][32]
array[33]
将返回2D数组的第33
行。这将是形状为(128,)
的一维数组。接下来,索引[32]
将应用于返回的行,因此您将在行33
列32
处获得单个值。因此,在这种情况下:
array[33][32] == array[33, 32]
但是,重复的索引语法仍然不是一个好主意。它比使用array[33, 32]
这样的语法要慢(因为array[33][32]
将触发两个单独的索引操作)。此外,它还可能导致意外行为。例如,如果您尝试分配给索引值:
array[33][32] = 19
这可能最终不会更改array
中的任何值,因为通过重复索引操作array[33][32]
可能会返回原始数组的副本。