【发布时间】:2018-11-15 15:46:58
【问题描述】:
按照我在this post 中的上一个问题:
我正在尝试构建一个包含 N 列(最多数百万)的 128 行矩阵。该矩阵的唯一目的是按列计算所有 128 行的平均值或中位数,并将其保存为向量(与我的数据的列数相同)。
我的数据文件的大小变化很大,使用上一篇文章中的代码(见上文),我已经能够执行此操作而没有任何问题。但是,当然,如果我正在处理更大的数据集,我的内存就会用完。请记住,错误在于将 128 行连接成一个新矩阵。
编辑用于连接文件中数据的代码如下:
for k = TTs; %TTs to plot
cd (strcat('TT',num2str(k))); %TT folder
for w = 1:4;
load(strcat('TT',num2str(k),'ch',num2str(w),'.mat'));
allChs1(4*(k-1)+w,:) = data(1,:); %concatenate into one matrix
end
cd ..
end
我考虑过平均 128 行(逐列)并连续保存该值,但这样做完全不成功...
知道如何实现这一点吗?而且,是否有更好的方法来逐列获取 128 行的平均值?
干杯, 爱子
【问题讨论】:
-
显示您尝试过的代码,minimal reproducible example(仅使用一个小例子,我们可以想象一些更大的输入),并指出它为什么不起作用。
-
@Wolfie 谢谢,刚刚添加了数据文件拼接的代码
-
你在预分配
allChs1吗?使用您在此处显示的代码,每次添加行时都会重新分配它,这意味着您使用的内存比需要的多。 -
几百万是多少?一个 128x10,000,000 的双精度矩阵需要少于 10 GB。你有多少可用内存?
-
@Cris Luengo 实际上我没有预先分配...矩阵的大小事先不知道,我还没有设法充分更改代码以逐步分配。关于矩阵的大小,它的范围在几十到几亿之间
标签: matlab for-loop signal-processing