从二维 numpy 点数组中获取最小 x 和 y

rei*_*eer 6 python arrays numpy

给定一个 numpy 2D 点数组,也就是第 3 维大小等于 2 的 3D 数组,如何获得所有点的最小 x 和 y 坐标?

例子:

第一的:

我编辑了我原来的例子,因为它是错误的。

data = np.array(
      [[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[11, 12],
        [13, 14],
        [15, 16]]])

minx = 0 # data[0][0][0]
miny = 1 # data[0][0][1]
Run Code Online (Sandbox Code Playgroud)

4 x 4 x 2:

第二:

array([[[ 0, 77],
        [29, 12],
        [28, 71],
        [46, 17]],
       [[45, 76],
        [33, 82],
        [14, 17],
        [ 3, 18]],
       [[99, 40],
        [96,  3],
        [74, 60],
        [ 4, 57]],
       [[67, 57],
        [23, 81],
        [12, 12],
        [45, 98]]])

minx = 0 # data[0][0][0]
miny = 3 # data[2][1][1]
Run Code Online (Sandbox Code Playgroud)

现在有没有一种简单的方法来获得数据所有点的最小 x 和 y 坐标?我玩弄了 amin 和不同的轴值,但没有任何效果。

澄清:

我的数组随着时间的推移存储来自不同机器人的位置。第一个维度是时间,第二个维度是机器人的索引。第三维是机器人在给定时间内的 x 或 y。

由于我想将它们的路径绘制到像素,我需要对我的数据进行归一化,以便这些点尽可能靠近原点而不会变成负数。我认为从每一点减去 [minx,miny] 对我来说就可以了。

小智 8

alko 的回答对我不起作用,所以这就是我所做的:

import numpy as np

array = np.arange(15).reshape(5,3)
x,y = np.unravel_index(np.argmin(array),array.shape)
Run Code Online (Sandbox Code Playgroud)

  • 不确定这就是 OP 所要求的,但它回答了我的问题“如何找到二维数组中最小元素的位置?”! (3认同)

alk*_*lko 7

似乎您需要连续的 min 沿轴。对于您的第一个示例:

>>> np.min(np.min(data, axis=1), axis=0)
array([ 0, 1])
Run Code Online (Sandbox Code Playgroud)

对于第二个:

>>> np.min(np.min(data, axis=1), axis=0)
array([0, 3])
Run Code Online (Sandbox Code Playgroud)

正如@Jamie,s 所指出的,可以声明相同的表达式(在 numpy 中比 1.7 更旧)

>>> np.min(data, axis=(1, 0))
array([0, 3])
Run Code Online (Sandbox Code Playgroud)