有什么办法可以加快它的速度吗? 在真正的大数据集上需要的时间太长了...... "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 ]
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
.