如果我想找到所有这些坐标,我如何找到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]]])
答案 0 :(得分:0)
结合np.argwhere
和np.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)