Python 在4D阵列中插入阵列(Numpy)

Python 在4D阵列中插入阵列(Numpy),python,arrays,numpy,Python,Arrays,Numpy,我从加速度计生成的数据中提取了一些特征,我有以下阵列: 带有40个值的X_mfccs_处理列表 Y_mfccs_处理列表,包含40个值 Z_mfccs_处理列表,具有40个值 X_平均值1 你的平均值是1 Z_平均值1 目前,我能够创建一个3D数组[shape=1,40,3],并将我的mfcss数组插入其中 self.extracted_features = np.ndarray(shape=(1, len(self.X_mfccs_processed), 3)) self.extrac

我从加速度计生成的数据中提取了一些特征,我有以下阵列:

带有40个值的X_mfccs_处理列表 Y_mfccs_处理列表,包含40个值 Z_mfccs_处理列表,具有40个值 X_平均值1 你的平均值是1 Z_平均值1 目前,我能够创建一个3D数组[shape=1,40,3],并将我的mfcss数组插入其中

self.extracted_features = np.ndarray(shape=(1, len(self.X_mfccs_processed), 3))
    self.extracted_features[:,:,0] = self.X_mfccs_processed
    self.extracted_features[:,:,1] = self.Y_mfccs_processed
    self.extracted_features[:,:,2] = self.Z_mfccs_processed
我的问题是:如何创建一个4D数组[shape=1,40,1,3],并在其中存储我的平均值?

通常np.ReformateSelf.extracted_特征,1,40,1,3效果很好

形状必须不同才能存储平均值。没有足够的空间

1,40,1,6或1,40,2,3

self.extracted_features = np.ndarray(shape=(1, len(self.X_mfccs_processed), 2, 3))
    self.extracted_features[:,:,0,0] = self.X_mfccs_processed
    self.extracted_features[:,:,0,1] = self.Y_mfccs_processed
    self.extracted_features[:,:,0,2] = self.Z_mfccs_processed
    self.extracted_features[:,:,1,0] = self.X_mean
    self.extracted_features[:,:,1,1] = self.Y_mean
    self.extracted_features[:,:,1,2] = self.Z_mean
看起来形状合理

对于1,40,1,6

self.extracted_features = np.ndarray(shape=(1, len(self.X_mfccs_processed), 1, 6))
    self.extracted_features[:,:,:,0] = self.X_mfccs_processed
    self.extracted_features[:,:,:,1] = self.Y_mfccs_processed
    self.extracted_features[:,:,:,2] = self.Z_mfccs_processed
    self.extracted_features[:,:,:,3] = self.X_mean
    self.extracted_features[:,:,:,4] = self.Y_mean
    self.extracted_features[:,:,:,5] = self.Z_mean
对于1,40,2,3

self.extracted_features = np.ndarray(shape=(1, len(self.X_mfccs_processed), 2, 3))
    self.extracted_features[:,:,0,0] = self.X_mfccs_processed
    self.extracted_features[:,:,0,1] = self.Y_mfccs_processed
    self.extracted_features[:,:,0,2] = self.Z_mfccs_processed
    self.extracted_features[:,:,1,0] = self.X_mean
    self.extracted_features[:,:,1,1] = self.Y_mean
    self.extracted_features[:,:,1,2] = self.Z_mean

我应该提到的是,这会使平均值重复40次。这对存储是不利的,但如果你做一些机器学习或数字运算,这可能是一个很好的折衷。或者,您可以制作1,41,1,3形状。

要制作数组,更好的方法是:

self.extracted_features = np.array([X_mfccs_processed,Y_mfccs_processed,Z_mfccs_processed]).T[None,...]
或相当于:

self.extracted_features = np.array([X_mfccs_processed,Y_mfccs_processed,Z_mfccs_processed]).T.reshape(1,-1,3)
但是,不能使用形状1添加另一个标注并在其中插入平均值。标注值是沿该标注的图元数。一个简单的思考方法是,形状为1,N的矩阵是1xN矩阵,这并不意味着你可以在第一维中插入平均值,在第二维中插入大小为N的列表。你需要想出另一个想法来存储你的手段。我建议使用单独的数组,形状为1,3,1:


并使用类似的索引来访问平均值。另一种选择是使用字典。根据您的应用程序,您可以选择一个更简单和/或更快的轴。

为什么轴0和轴2的尺寸为1?另外,您希望如何存储这些平均值?