我用这个创建了一个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 )
可以放到另一个数组中