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



我知道在numpy中我可以用

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

如果我有一个等维向量的列表,V = [v1, v2, v3, v4](但是是一个列表,而不是数组)?用numpy.minimum(*V)不行。你更喜欢做什么呢?

如果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.]])

转换为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()

最新更新