Python:最小最大值扩展数组的快速方法

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

我使用以下方法在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_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。与手动计算差值相同。问题是如何加快代码的速度,而不是抓住所有的死角。尽管如此,你的评论还是非常有用的。