numpy中多个向量的元素最小值

时间:2016-09-01 17:30:50

标签: python numpy

我知道在numpy中我可以使用

计算两个向量的元素最小值
numpy.minimum(v1, v2)

如果我有一个相等维度的矢量列表V = [v1, v2, v3, v4](但是列表,而不是数组),该怎么办?考虑numpy.minimum(*V)并不起作用。相反,首选的是什么?

2 个答案:

答案 0 :(得分:7)

如果*V只有2个数组,则

V有效。 np.minimumufunc,需要2个参数。

作为ufunc,它有.reduce方法,因此可以重复应用于列表输入。

In [321]: np.minimum.reduce([np.arange(3), np.arange(2,-1,-1), np.ones((3,))])
Out[321]: array([ 0.,  1.,  0.])

我怀疑np.min方法更快,但这可能取决于数组和列表大小。

In [323]: np.array([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]).min(axis=0)
Out[323]: array([ 0.,  1.,  0.])

ufunc还有一个accumulate,它可以向我们显示每个减少阶段的结果。这不是有趣的,但我可以通过调整输入来改变它。

In [325]: np.minimum.accumulate([np.arange(3), np.arange(2,-1,-1), np.ones((3,))])
     ...: 
Out[325]: 
array([[ 0.,  1.,  2.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])

答案 1 :(得分:5)

转换为NumPy数组并沿第一轴执行ndarray.min -

np.asarray(V).min(0)

或者只是在引擎盖下使用np.amin,它会在沿着该轴找到最小值之前将输入转换为数组 -

np.amin(V,axis=0)

示例运行 -

In [52]: v1 = [2,5]

In [53]: v2 = [4,5]

In [54]: v3 = [4,4]

In [55]: v4 = [1,4]

In [56]: V = [v1, v2, v3, v4]

In [57]: np.asarray(V).min(0)
Out[57]: array([1, 4])

In [58]: np.amin(V,axis=0)
Out[58]: array([1, 4])

如果您需要将最终输出作为列表,请使用.tolist()附加输出。