【发布时间】:2021-02-21 21:41:50
【问题描述】:
我正在对形状为 1536 x 16 x 48 的矩阵进行一些处理。以下是有关此尺寸的一些详细信息:
- 1536:6 秒内收集数据
- 16:收集器的数量(在我的例子中是电极)
- 48:样本数
所以,从 16 个不同的收集器的角度来看,我有 1536 个值的 48 个样本(代表 6 秒的数据)。
我的目标是对这个矩阵进行一些处理,但首先需要进行一些转换。
-
由于 6 秒是一个大序列,我想将每个样本分成更小的序列,特别是 3 或 2 秒。例如,1 个 6 秒样本 (1536) 可以拆分为 2 个 3 秒样本 (768) 或 3 个 2 秒样本 (512)。这个转换后的矩阵的形状将从
1536x16x48变为768x16x96(3 秒)或512x16x144(2 秒)。 -
一旦我有了这个新矩阵,我想重塑它,这样我就可以为每个观察者获得一个 2d 矩阵,并且所有值都以列而不是行组织(例如,2 秒拆分:
512x16x144=>144x512x16)。 -
最后,我现在可以遍历第 3 维 (
16),对每个 2d 矩阵进行一些计算(即快速傅立叶变换),然后将它们全部归约(求和)为一个,以获得最终的144 x 512矩阵(在 2 秒分割场景中)。
下面的代码是我用numpy 做的,但是当我绘制从这个方法生成的样本时,这对我来说显然是错误的。
def generate_fft_data(data,labels, n_seconds_split=3):
x = 256 * n_seconds_split
y = 16
z = 48 * int(6/n_seconds_split)
data = data.transpose(2,0,1).reshape(x,y,z).transpose(2,0,1)
fft_data = []
for electrode in range(data.shape[2]):
y_t = fft(data[:,:,electrode])
fft_data.append(np.abs(y_t))
sum_of_ffts = np.add.reduce(fft_data)
return sum_of_ffts
如果需要,我可以提供更多详细信息。提前致谢。
【问题讨论】:
-
这听起来像是 xarray 的一个很好的用例
-
感谢您的建议,但现在对我来说最困难的部分是(信不信由你)重塑/分割部分。
标签: python arrays numpy matrix