在大型数据集上用numpy高效地替换许多二维数组的子数组。

问题描述 投票:0回答:1

有什么办法可以加快它的速度吗? 在真正的大数据集上需要的时间太长了...... "matrice "是一个没有实体长度的numpy数组列表(有些可能是1-5个元素,或长或短)。

    def replaceScaleBelowZero(arr):  
        if np.amax(arr)<=0:
            arr[arr<=0] = minmax_scale(arr[arr<=0],(min_thresh*0.75,min_thresh)) 
        elif np.min(arr)<=0:
            arr[arr<=0] = minmax_scale(arr[arr<=0],(min_thresh*0.75,min_thresh)) 
        return arr 
    def replaceScaleBelowMinThresh(arr):  
       if np.amax(arr)<min_thresh:
           arr[arr<sl_thresh] = minmax_scale(arr[arr<min_thresh],(min_thresh*0.75,min_thresh)) 
       elif np.min(arr)<min_thresh:  
           arr[arr<min_thresh] = minmax_scale(arr[arr<min_thresh],(min_thresh*0.75,min_thresh)) 
       return arr 

    matrice = [replaceScaleBelowZero(slice_  ) for slice_ in matrice ] 
    matrice = [replaceScaleBelowMinThresh(slice_ ) for slice_ in matrice ]
arrays list performance numpy processing-efficiency
1个回答
0
投票

sklearn.preprocessing.minmax_scale 使用了大量的检查。如果你重写你的

arr[arr<=0] = minmax_scale(arr[arr<=0],(min_thresh*0.75,min_thresh))

作为

a = arr[arra<=0]
a -= a.min()
a /= a.max()
a *= (0.25 * min_thresh)
a += 0.75 * min_thresh

(假设arr是1d)应该会更快。如果能成功的话,我想可以进一步优化,把这个-=, =, *=, += 改写成只有两个操作数。

在你的第二个函数中,你使用了

arr[arr<sl_thresh] = minmax_scale(arr[arr<min_thresh] ...

如果 sl_thresh != min_thresh 这可能会给出错误。如果 sl_thresh = min_thresh 我想你可以放下你 if-else 作为你 ValueError 可能是由 sklearn.

© www.soinside.com 2019 - 2024. All rights reserved.