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

kuz*_*roo 5 python numpy

我知道在numpy中我可以计算出两个向量的元素最小值

numpy.minimum(v1, v2)
Run Code Online (Sandbox Code Playgroud)

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

hpa*_*ulj 8

*V如果V只有2个数组,则有效. np.minimum是一个ufunc并且需要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.])
Run Code Online (Sandbox Code Playgroud)

我怀疑这种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.])
Run Code Online (Sandbox Code Playgroud)

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.]])
Run Code Online (Sandbox Code Playgroud)


Div*_*kar 5

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

np.asarray(V).min(0)
Run Code Online (Sandbox Code Playgroud)

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

np.amin(V,axis=0)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

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])
Run Code Online (Sandbox Code Playgroud)

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