如何查找二维数组中值的x、y坐标(或索引)



我用这个创建了一个2D数组

import numpy as np
arr = np.arange(4)
arr_2d = arr.reshape(2,2)   

数组看起来像这样

print(arr_2d)
[[0, 1],
 [2, 3]]

我试图获得arr_2d中每个条目的位置作为x, y坐标,并最终得到一个数组,看起来像这样,

print(full_array)
[[0, 0, 0],
[1, 0, 1],
[2, 1, 0],
[3, 1, 1]]

其中第一列包含arr_2d中的值,第二列包含每个值的x(或行)坐标,第三列包含每个值的y(或列)坐标。我尝试扁平化arr_2d并枚举以获得每个条目的索引,但我无法以这种形式获得它。如有任何帮助,我将不胜感激。

您可以使用np.unravel_index():

x = arr_2d.flatten()
r = np.vstack((x,np.unravel_index(np.arange(arr_2d.size),arr_2d.shape))).T
# r = array([[0, 0, 0],
#           [1, 0, 1],
#           [2, 1, 0],
#           [3, 1, 1]], dtype=int64)

flatten()np.unravel_index()默认使用行主序,因此我们知道正确的顺序是保留的。

也许不是最好的方法,但它有效(假设这是您所追求的):

import numpy as np
arr = np.arange(4)
arr_2d = arr.reshape(2,2)  
arr_2d[1][0] = 5 # to illustrate a point
print(arr_2d)
dimensions = arr_2d.shape
for y in range(dimensions[0]):
    for x in range(dimensions[1]):
        print(arr_2d[x][y], " (x:", x, " y:", y, ")")

呈现:

[[0 1]
 [5 3]]
0  (x: 0  y: 0 )
1  (x: 1  y: 0 )
5  (x: 0  y: 1 )
3  (x: 1  y: 1 )

可以放到另一个数组中