python - 从不同长度的子子列表中查找全局最小值

标签 python numpy

我有一个由不同长度的子列表组成的列表,形状如下:

a = [[[-0.152, -0.171, -0.132, -0.111, -0.088],[0.565, 0.718, 0.794, 0.870, 0.947]],[[-0.1293, -0.094, -0.062, -0.030, 3.207, 0.],[1.223, 1.266, 1.309, 0.231, 1.394, 1.434]]]

所以它基本上是一个主列表,有两个子列表 AB(可能更多),每个子列表都有两个子列表 A1A2B1B2(子子列表的个数始终固​​定为2):

a = [A, B]
A = [A1, A2]
B = [B1, B2]

A1, A2 La 等长,B1, B2 > 具有长度 Lb,但这些长度不一定相等,即:La == Lb 并不总是正确的。

我需要获取 A1B1 之间以及 A2B2 之间的全局最小值等等如果有更多类似形状的子列表。即:如果我在 a 中有一个带有 C = [C1, C2] 的额外 C 子列表,那么我需要全局A1、B1、C1A2、B2、C2 之间的最小值。

对于上面的 a 列表,输出必须如下所示:

array([-0.171, 0.231])

我已经尝试了 np.min(a, axis=*) 的几种变体,但我无法让它返回我需要的内容。如果 La == Lb 我可以使用 np-min 来获得我需要的结果。例如,如果我从每个子子列表 B1B2 中删除一个项目,以便 La = Lb = 5 那么我可以使用:

a = [[[-0.152, -0.171, -0.132, -0.111, -0.088],[0.565, 0.718, 0.794, 0.870, 0.947]],[[-0.1293, -0.094, -0.062, -0.030, 3.207],[1.223, 1.266, 1.309, 0.231, 1.394]]]
np.min(np.min(a, axis=2) ,axis=0)
array([-0.171,  0.231])

最佳答案

通过 numpy 数组或 Pandas 或其他一些格式更改数据结构以简化操作可能是最好的。

但是,一种纯 Python 方法是:

map(lambda x: min(map(min, x)), zip(*a))

关于python - 从不同长度的子子列表中查找全局最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577133/

相关文章:

Python 守护进程是如何工作的

python - 如何处理函数的不同返回值

python - 使用 Numpy 的最快方法 - 多维和与乘积

python - 如果最后 N 个元素为 0 且为常量,则删除它们

python - 直方图中绘图的百分比变化

python - Django 模型保存

python - 当我运行脚本时,为什么 Spyder 要保存我的 *.py 文件?

python - 对数组进行切片以排除单个元素

python - 如何平滑Python中的数据?

python - Numba nopython 模式不能接受二维 bool 索引