在Numpy数组中如何查找值的所有坐标

时间:2017-01-02 23:37:51

标签: python arrays numpy multidimensional-array

如果我想找到所有这些坐标,我如何找到3D数组中最大值的坐标?

这是我的代码到目前为止,但它不起作用,我不明白为什么。

library(grid)
rangex <- range(1,700)
rangey <- range(1,700)
data=c(200:500)
plot(rangex, rangey,type="n", ann=F,ylim=c(1,700))
x1=500
y1=500
x2=200
y2=200
lines(data,data)
pushViewport(dataViewport(rangex, rangey))
grid.curve(x1,y1,x2,y2,default.units = "native")
grid.points(x1,y1,pch=20)
grid.points(x2,y2,pch=20)
popViewport()

例如:

s = set()
elements = np.isnan(table)
numbers = table[~elements]
biggest = float(np.amax(numbers))
a = table.tolist()
for x in a:
    coordnates = np.argwhere(table == x)
    if x == biggest:
        s.add((tuple(coordinates[0]))
print(s)

应该返回table = np.array([[[ 1, 2, 3], [ 8, 4, 11]], [[ 1, 4, 4], [ 8, 5, 9]], [[ 3, 8, 6], [ 11, 9, 8]], [[ 3, 7, 6], [ 9, 3, 7]]])

2 个答案:

答案 0 :(得分:0)

结合np.argwherenp.max(正如@AshwiniChaudhary在评论中已经指出的那样)可用于查找坐标:

>>> np.argwhere(table == np.max(table))
array([[0, 1, 2],
       [2, 1, 0]], dtype=int64)

要获得一个集合,您可以使用集合理解(需要将子数组转换为元组,以便它们可以存储在集合中):

>>> {tuple(coords) for coords in np.argwhere(table == np.max(table))}
{(0, 1, 2), (2, 1, 0)}

答案 1 :(得分:0)

In [193]: np.max(table)
Out[193]: 11
In [194]: table==np.max(table)
Out[194]: 
array([[[False, False, False],
        [False, False,  True]],
  ...
       [[False, False, False],
        [False, False, False]]], dtype=bool)
In [195]: np.where(table==np.max(table))
Out[195]: 
(array([0, 2], dtype=int32),
 array([1, 1], dtype=int32),
 array([2, 0], dtype=int32))

transpose将3个数组的元组转换为具有2组坐标的数组:

In [197]: np.transpose(np.where(table==np.max(table)))
Out[197]: 
array([[0, 1, 2],
       [2, 1, 0]], dtype=int32)

这个操作很常见,它已被包装在函数调用中(查看其文档)

In [199]: np.argwhere(table==np.max(table))
Out[199]: 
array([[0, 1, 2],
       [2, 1, 0]], dtype=int32)