Python扩展4D数据规模

3

我有一个Python 4D数组,其一般结构如下:

tdata = [sample, x, y, channel]

拥有[10000, 5, 5, 12]的整体维度,我想对数据进行minmaxscaler或standardscaler。问题在于两个缩放器只接受2D数据。如果我想要针对每个样本的每个[x,y] 2D通道进行缩放,是否有更有效的方法,而不是尝试:

for i in range(0,len(sample)):
    for j in range(0,len(channel)):
        transformed_tdata[i,:,:,j] = scaler.fit(tdata[i,:,:,j])

那么每个通道的每个样本不是都会独立进行缩放吗?


你希望每个样本-通道对都有一个单独的标量,还是所有“坐标”都使用单个最大最小标量? - Robert King
希望的是:对于 [:,:,:,j] 应用相同的缩放器。换句话说,每个通道都有自己独立的缩放器。 - WX_M
1个回答

3

你走在正确的道路上。如果你想要每个通道都有一个缩放器,你可以将数据的每个通道重新塑造为形状为(10000,5 * 5)的形式。每个通道(之前是5x5)现在是一个长度为25的向量,这样缩放器就可以正常工作了。你需要用与channel_scalers相同的方式对评估数据进行转换。

import numpy as np

from sklearn.preprocessing import MinMaxScaler
n_channels = 12

tdata = np.random.rand(10000, 5, 5, n_channels)
tdata_transformed = np.zeros_like(tdata)

channel_scalers = []

for i in range(n_channels):
    mmx = MinMaxScaler()
    slc = tdata[:, :, :, i].reshape(10000, 5*5) # make it a bunch of row vectors
    transformed = mmx.fit_transform(slc)
    transformed = transformed.reshape(10000, 5, 5) # reshape it back to tiles
    tdata_transformed[:, :, :, i] = transformed # put it in the transformed array
    channel_scalers.append(mmx) # store the transform

在“slc = slc.reshape(10000,5,5)”这一行中,应该改为“slc = transformed.reshape(10000,5,5)”吗? - WX_M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接