如何获取数组中数组的最小和最大值?

4

我正在尝试获取一列中的最小值和最大值。

这是我的测试代码:

from numpy import array
import numpy as np

test = [array([[619, 502, 551],
       [623, 502, 551],
       [624, 504, 551]]),
 array([[624, 498, 531],
       [628, 502, 529]]),
 array([[619, 496, 557],
       [892, 508, 559]]),
 array([[619, 494, 561],
       [895, 506, 559],
       [902, 512, 559]]),
 array([[619, 494, 559],
       [918, 510, 567]]),
 array([[619, 493, 561],
       [931, 512, 561],
       [932, 512, 561]]),
 array([[619, 494, 561],
       [942, 510, 559]]),
 array([[619, 493, 561],
       [620, 493, 559],
       [948, 512, 561]]),
 array([[619, 494, 591],
       [752, 542, 633]]),
 array([[626, 465, 567],
       [766, 532, 633]])]

data = array(test)

我尝试过使用np.min和不同的索引,但都没有成功。

我希望能够获取例如第二列(或任何一列)的最小值和最大值。

由于实际数据中有很多项目,因此我无法使用for循环逐个遍历。

非常感谢您提供任何建议。谢谢。


所有行的子数组大小是否相同? - Sharath
子数组具有相同的列数,但行数不同。也就是说,如果一个解决方案适用于测试数据,那么它应该适用于我。 - Abrian Abir
2
你的代码在我的系统上无法运行,出现了“仅接受2个非关键字参数”的错误。 - Quang Hoang
@ QuangHoang 对此感到抱歉,现在应该可以了。 - Abrian Abir
3个回答

3

如果我理解正确,你可以使用stack

np.vstack([d for d in data]).min(axis=0)

输出:

array([619, 465, 529])

1
如果列相同,您可以尝试以下方法获取最小/最大值。
In [28]: test = [[[619, 502, 551],
    ...:        [624, 504, 551]],
    ...: [[624, 498, 531],
    ...:        [628, 502, 529]],
    ...: [[619, 496, 557],
    ...:        [892, 508, 559]],
    ...: [[619, 494, 561],
    ...:        [895, 506, 559],
    ...:        [902, 512, 559]],
    ...: [[619, 494, 559],
    ...:        [918, 510, 567]],
    ...: [[619, 493, 561],
    ...:        [931, 512, 561],
    ...:        [932, 512, 561]],
    ...: [[619, 494, 561],
    ...:        [942, 510, 559]],
    ...: [[619, 493, 561],
    ...:        [620, 493, 559],
    ...:        [948, 512, 561]],
    ...: [[619, 494, 591],
    ...:        [752, 542, 633]],
    ...: [[626, 465, 567],
    ...:        [766, 532, 633]]]

In [29]: test1 = []

In [30]: [test1.append(t) for t1 in test for t in t1]

In [31]: test1
Out[31]:
[[619, 502, 551],
 [624, 504, 551],
 [624, 498, 531],
 [628, 502, 529],
 [619, 496, 557],
 [892, 508, 559],
 [619, 494, 561],
 [895, 506, 559],
 [902, 512, 559],
 [619, 494, 559],
 [918, 510, 567],
 [619, 493, 561],
 [931, 512, 561],
 [932, 512, 561],
 [619, 494, 561],
 [942, 510, 559],
 [619, 493, 561],
 [620, 493, 559],
 [948, 512, 561],
 [619, 494, 591],
 [752, 542, 633],
 [626, 465, 567],
 [766, 532, 633]]

In [32]: np.amin(test1, None)
Out[32]: 465

In [33]: np.max(test1, None)
Out[33]: 948

0
如果您只是想要一个列,可以利用numpy数组的索引。 例如:
arr = np.asarray(((1,2,3),(4,5,6),(7,8,9)))
print(arr)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

使用切片(slice)语法,您可以像下面的例子一样获取数组的列作为子数组。
print(arr[:,0])
[1 4 7]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接