numpy 如何在笛卡尔方向上均匀划分的数组中找到x和y值?

w8rqjzmb  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(157)

我要做的只是为数组中最高的数字找到并定义一个x和y坐标。
例如,50000将输出:x=2,y=2。有什么简单的方法可以实现这一点吗?
我创建了以下代码:

data_array = [[0, 1, 2, 3, 50000],
              [5, 6, 7, 8, 9],
              [10, 11, 12, 13, 14],
              [15, 16, 17, 18, 19],
              [20, 21, 22, 23, 24]]

highest_num = data_array[0][0]
x = 0
y = 0

# looping from 0 to len(data_array)-1

for i in range(len(data_array)):

    # looping from 0 to len(data_array[i])-1
    for j in range(len(data_array[i])):

        # checking data_array[x][y] is less than data_array[i][j]
        if data_array[x][y] < data_array[i][j]:

            # updating x and y
            x = i
            y = j
            highest_num = data_array[i][j] 

# printing the values of highest_num, x and y

print("highest_num =", highest_num)
print("x =", x)
print("y =", y)

但我会得到x=0,y=4,我想引用数组的中间部分,即12,并使输出为x=2,y=2。
在没有 numpy 情况下,这能做到吗?不管它在哪里,我都要用最大值来跟踪点数。

fcg9iug3

fcg9iug31#

修改程序中的2行:

print("x =", x-2)
print("y =", y+2)
wnrlj8wa

wnrlj8wa2#

如果您可以使用NumPy这样做argmax,然后找到坐标(行COL),并将坐标切换到Chartersian(反转y),然后两者都减去一半,(考虑到它在两个维度上都是偶数。

idx = np.argmax(data_array)
m, n =  len(data_array), len(data_array[0])

r, c = m - (idx // n) - 1  , idx % n
y , x = r - (m // 2), c - (n // 2)

如果不是,只需使用您编写的代码来查找最大索引。

相关问题