Python:最小最大值扩展数组的快速方法
我使用以下方法在0和1之间缩放n维数组:Python:最小最大值扩展数组的快速方法,python,numpy,machine-learning,scikit-learn,data-analysis,Python,Numpy,Machine Learning,Scikit Learn,Data Analysis,我使用以下方法在0和1之间缩放n维数组: x_scaled=(x-np.amin(x))/(np.amax(x)-np.amin(x)) 但对于大型数据集来说,速度非常慢。我需要处理数千个相对较大的阵列。在python中有没有更快的方法 编辑:我的数组处于形状(24,24,24,9)。对于scikit中的MinMax scaler,输入数组必须具有特定的形状,而我的没有,因此我不能使用它。文件中说: Parameters: X : array-like, shape [n_samples, n
x_scaled=(x-np.amin(x))/(np.amax(x)-np.amin(x))
但对于大型数据集来说,速度非常慢。我需要处理数千个相对较大的阵列。在python中有没有更快的方法
编辑:我的数组处于形状(24,24,24,9)。对于scikit中的MinMax scaler,输入数组必须具有特定的形状,而我的没有,因此我不能使用它。文件中说:
Parameters:
X : array-like, shape [n_samples, n_features]
代码最简单的加速就是不要计算两次。这本身应该有30%左右的帮助:
mn, mx = x.min(), x.max()
x_scaled = (x - mn) / (mx - mn)
您还可以通过以下方式获得一些里程:
就这一点而言,如果
min
或max
实际运行缓慢,那么您的数组有多大?最简单的代码加速就是不要计算两次。这本身应该有30%左右的帮助:
mn, mx = x.min(), x.max()
x_scaled = (x - mn) / (mx - mn)
您还可以通过以下方式获得一些里程:
就这一点而言,
min
或max
实际运行缓慢的数组有多大?可以优化MadPhysicator的答案,以避免不必要的临时数据分配:
x -= x.min()
x /= x.ptp()
就地运算符(+=
,-=
等)不会占用内存(因此在磁盘上进行交换的可能性较小)。当然,这会破坏您最初的x
,因此只有在您不需要x
之后才可以
此外,他提出的在高维矩阵中连接多个数据的想法,如果你有许多通道,这是一个好主意,但同样应该测试这个大矩阵是否会产生磁盘交换,与按顺序处理的小矩阵相比。MadPhysician的答案可以优化,以避免不必要的临时数据分配:
x -= x.min()
x /= x.ptp()
就地运算符(+=
,-=
等)不会占用内存(因此在磁盘上进行交换的可能性较小)。当然,这会破坏您最初的x
,因此只有在您不需要x
之后才可以
此外,他提出的在高维矩阵中连接多个数据的想法是一个好主意,如果你有许多通道,但是与按顺序处理的小矩阵相比,应该再次测试这个大矩阵是否会产生磁盘交换。使用它是有风险的,即max-min,因为它在理论上可以是0,导致一个例外。使用起来更安全,因为它没有这个问题。首先,pip安装scikit-learn
from sklearn.preprocessing import minmax_scale
minmax_scale(array)
如果使用sklearn管道,请改用。使用它是有风险的,即max-min,因为理论上它可以是0,从而导致异常。使用起来更安全,因为它没有这个问题。首先,pip安装scikit-learn
from sklearn.preprocessing import minmax_scale
minmax_scale(array)
如果使用sklearn管道,请改用。我想您仍然可以使用sklearn的
MinMaxScaler
。您只需将数据重塑为类似于[n_samples,n_features]
的形状,对其进行缩放,然后将其重塑为原始形状。这其实并不重要,只要你正确地重塑它。就速度而言,我不认为这与使用numpy有什么不同,它只是让你省去了乘法和除法的麻烦。我想你仍然可以使用sklearn的MinMaxScaler
。您只需将数据重塑为类似于[n_samples,n_features]
的形状,对其进行缩放,然后将其重塑为原始形状。这其实并不重要,只要你正确地重塑它。就速度而言,我不认为这与使用numpy有什么不同,它只是让您免去了乘法和除法的麻烦。使用sklearn的MinMaxScaler
怎么样。也不要计算两次最小值?数据集的形状是什么?您能给我们展示一下sklearn.preprocessing.minmax\u scale(x)
的输出吗?是否有错误消息?回答错误?使用sklearn提供的MinMaxScaler
怎么样。也不要计算两次最小值?数据集的形状是什么?您能给我们展示一下sklearn.preprocessing.minmax\u scale(x)
的输出吗?是否有错误消息?回答错了吗?谢谢,我的问题是,我想用minmax扩展大量的数组,所以它不是一个大数组,而是许多相对较大的数组。@Wise。然后连接它们并沿特定轴应用函数。请把你的问题弄清楚并完整。这个答案很危险,因为ptp()
理论上可以返回0。谢谢,我的问题是,我想用minmax扩展大量数组,所以它不是一个大数组,而是大量相对大的数组。@Wise。然后连接它们并沿特定轴应用函数。请把你的问题弄清楚和完整。这个答案很危险,因为ptp()
理论上可以返回0。@MaxU:在使用完全广播的特定情况下,你是对的。但使用就地运算符通常是一个救生员;-)这个答案很危险,因为ptp()
理论上可以返回0。@A-B-B。与手动计算差值相同。问题是如何加快代码的速度,而不是抓住所有的死角。话虽如此,你的评论还是非常有用的。@MaxU:在使用全广播的情况下,你是对的。但使用就地运算符通常是一个救生员;-)这个答案很危险,因为ptp()
理论上可以返回0。@A-B-B。与手动计算差值相同。问题是如何加快代码的速度,而不是抓住所有的死角。尽管如此,你的评论还是非常有用的。