我知道在numpy中我可以使用
计算两个向量的元素最小值numpy.minimum(v1, v2)
如果我有一个相等维度的矢量列表V = [v1, v2, v3, v4]
(但是列表,而不是数组),该怎么办?考虑numpy.minimum(*V)
并不起作用。相反,首选的是什么?
答案 0 :(得分:7)
*V
只有2个数组,则 V
有效。 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.])
我怀疑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()
附加输出。