numpy 最小最大定标器:归一化4D输入数组

ar7v8xwq  于 2023-01-26  发布在  其他
关注(0)|答案(3)|浏览(128)

我有一个4D输入数组,我想使用MinMaxScaler对其进行归一化。为了简单起见,我给予了一个包含以下数组的示例:

A = np.array([
            [[[0, 1, 2, 3],
              [3, 0, 1, 2],
              [2, 3, 0, 1],
              [1, 3, 2, 1],
              [1, 2, 3, 0]]],
            
            [[[9, 8, 7, 6],
              [5, 4, 3, 2],
              [0, 9, 8, 3],
              [1, 9, 2, 3],
              [1, 0, -1, 2]]],
            
            [[[0, 7, 1, 2],
              [1, 2, 1, 0],
              [0, 2, 0, 7],
              [-1, 3, 0, 1],
              [1, 0, 1, 0]]]
              ])
A.shape
(3,1,5,4)

在给定的示例中,数组包含3个输入样本,其中每个样本的形状为(1,5,4)。输入的每列表示1个变量(特征),因此每个样本的形状为4 features
我想规范化输入数据,但MinMaxScaler需要一个2D数组(n_samples, n_features),如dataframe。
那么我如何使用它来规范化这个输入数据呢?

zaqlnxep

zaqlnxep1#

对数据进行矢量化

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

A_sq = np.squeeze(A)

print(A_sq.shape)
# (3, 5, 4)

scaler.fit(np.squeeze(A_sq).reshape(3,-1)) # reshape to (3, 20)
#MinMaxScaler()
jvlzgdj9

jvlzgdj92#

您可以使用下面的代码来规范化4D数组。

from sklearn.preprocessing import MinMaxScaler, StandardScaler
scaler = MinMaxScaler(feature_range=(0, 1))
def norm(arr):
    arrays_list=list()
    objects_list=list()
    for i in range(arr.shape[0]):
        temp_arr=arr[i]
        temp_arr=temp_arr[0]
        scaler.fit(temp_arr)
        temp_arr=scaler.transform(temp_arr)
        objects_list.append(scaler)
        arrays_list.append([temp_arr])
    return objects_list,np.array(arrays_list)

将数组传递给函数

objects,array=norm(A)

它将返回一个MinMax对象列表和具有规范化值的原始数组。

    • 输出:**

gmol1639

gmol16393#

“如果希望每个通道都有一个定标器,可以将数据的每个通道重新整形为(10000,5*5)。每个通道(以前是5x5)现在是一个长度为25的向量,缩放器可以工作。您必须以与channel_scalers中的缩放器相同的方式转换评估数据。”也许这会有所帮助,我不确定这是否正是您要找的,但是... Python scaling with 4D data

相关问题