python-3.x 切片的2D数组上的numpy ndenumerate给出了错误的索引

h9vpoimq  于 2023-03-20  发布在  Python
关注(0)|答案(1)|浏览(96)

为什么我在使用ndenumerate对切片的2D数组进行迭代时得到不正确的索引?

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr[:, ::2]):
    print(idx, x)

输出:

(0, 0) 1
(0, 1) 3
(1, 0) 5
(1, 1) 7

我认为它应该给予以下输出:

(0, 0) 1
(0, 2) 3
(1, 0) 5
(1, 2) 7

注意:如果不使用slice,我将获得正确的索引。

guykilcj

guykilcj1#

当您这样做时:

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr[:, ::2]):
    print(idx, x)

您将获得:

(0, 0) 1
(0, 1) 3
(1, 0) 5
(1, 1) 7

因为arr[:, ::2]为:

array([[1, 3],
       [5, 7]])   #ndenumerate will enumerate over this 2X2 array

当您这样做时:

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr):
    print(idx, x)

您将获得:

(0, 0) 1
(0, 1) 2
(0, 2) 3
(0, 3) 4
(1, 0) 5
(1, 1) 6
(1, 2) 7
(1, 3) 8

因为arr

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])   #ndenumerate will enumerate over this 2X4 array

相关问题