Python 如何减少对以下代码调用np.sum()的次数?(测试规则规定只能进行2次调用)

Python 如何减少对以下代码调用np.sum()的次数?(测试规则规定只能进行2次调用),python,numpy,Python,Numpy,第一个\u半部分\u第二个\u半部分获取形状(n,2*m)的二维数组作为参数。函数的输出应该是一个矩阵,其中来自输入的行的前m个元素的和大于行上最后m个元素的和 此解决方案可行,但对np.sum()的调用数量取决于测试大小数据。是否有任何可能的方法仅使用两个np.sum()调用来实现此目的 对于随机测试数据: 20 != 2:预期正好有两次调用函数np.sum 你可以这样做 m=a.shape[1]//2#假设它有偶数列 sum1=np.sum(a[:,:m],轴=1)#上半部分求和 sum2

第一个\u半部分\u第二个\u半部分获取形状(n,2*m)的二维数组作为参数。函数的输出应该是一个矩阵,其中来自输入的行的前m个元素的和大于行上最后m个元素的和

此解决方案可行,但对np.sum()的调用数量取决于测试大小数据。是否有任何可能的方法仅使用两个np.sum()调用来实现此目的

对于随机测试数据:
20 != 2:预期正好有两次调用函数np.sum

你可以这样做


m=a.shape[1]//2#假设它有偶数列
sum1=np.sum(a[:,:m],轴=1)#上半部分求和
sum2=np.sum(a[:,m:],axis=1)#下半部分求和
a[sum1>sum2]#获取上半部分总和较大的行

np.sum的时间复杂度为O(n),因此在您的情况下,无论是一个调用(O(n))还是两个调用(O(n/2)+O(n/2)=O(n))。那么您的问题是什么?是的,我理解,但如果a的形状是(5,6),则会进行十个np.sum()调用。有没有办法使用两个np.sum()调用来实现这一点?您正在线性遍历数组(每个单元格只访问一次),因此无需优化。除非您在其他地方使用这些计算,否则您可以使用2D累积和。
def first_half_second_half(a):
    len=int(a.shape[1]/2)
    for i in range(a.shape[0]):
        if np.sum(a[i,:len])>np.sum(a[i,len:]):
            arr.append(a[i,:])
    return np.array(arr)

a = np.array([[1, 3, 4, 2],
              [2, 2, 1, 2]])
first_half_second_half(a)

**array([[2, 2, 1, 2]])**