如何在不使用for循环的情况下获取NumPy数组每行的最小值?
获取NumPy数组每行最小值的无循环方案
你可以直接利用NumPy的向量化内置方法来实现,完全不需要显式循环(包括列表推导式这类Python层面的循环),具体有两种等价写法:
方法示例
首先定义你的数组:
import numpy as np data=np.array([[ 0.000e+00, 0.000e+00], [ 0.000e+00, 0.000e+00], [-3.590e+00, -1.448e+00], [ 3.642e-02, 4.813e-02], [ 2.149e+02, 2.186e+02], [ 6.147e+01, 6.633e+01], [ 3.733e-02, 4.821e-02], [ 2.131e+02, 2.186e+02], [ 6.205e+01, 6.633e+01], [-4.220e-01, -7.210e-02], [ 2.110e-09, 6.797e-10], [ 1.198e-11, 2.675e-12], [ 1.603e+02, 1.362e+02]])
写法1:调用np.min()函数
指定axis=1表示按行取最小值:
row_mins = np.min(data, axis=1)
写法2:调用数组自身的min()方法
效果和上面完全一致:
row_mins = data.min(axis=1)
输出结果
执行后会得到一个一维NumPy数组:
array([ 0.00000000e+00, 0.00000000e+00, -3.59000000e+00, 3.64200000e-02, 2.14900000e+02, 6.14700000e+01, 3.73300000e-02, 2.13100000e+02, 6.20500000e+01, -4.22000000e-01, 6.79700000e-10, 2.67500000e-12, 1.36200000e+02])
如果需要转换成Python列表,只需追加.tolist():
row_mins.tolist()
得到的结果和你用列表推导式生成的完全相同:
[0.0, 0.0, -3.59, 0.03642, 214.9, 61.47, 0.03733, 213.1, 62.05, -0.422, 6.797e-10, 2.675e-12, 136.2]
优势说明
这类NumPy内置的向量化操作是底层用C实现的,比Python层面的循环(包括列表推导式)效率高得多,尤其是处理百万级以上的大规模数组时,性能差距会非常明显。
内容的提问来源于stack exchange,提问作者len
相关产品推荐
相关产品推荐

