使用索引和值将3D Matlab矩阵重塑为2D矩阵

时间:2018-06-25 13:44:49

标签: matlab transform reshape matrix-indexing

我在MATLAB中有一个3D矩阵。它具有3行,4列和2个时间范围。请查看数据集:

>> size(filtered_data)
ans =
 3     4     2

>> filtered_data
filtered_data(:,:,1) =
 15     22     19     16
 15     15     13     17
 19     20     17     17

filtered_data(:,:,2) =
 14     17     14     10
 18     19     11     18
 16     15     14     17

我想将此3D矩阵的所有值及其索引存储到2维变量中。

这看起来像这样

2-dimensional data format

我尝试使用find()函数,但是它返回多个索引,并且需要您输入需要为其计算索引的值。

是否存在针对此问题的预定义MATLAB函数?

我将不胜感激。

2 个答案:

答案 0 :(得分:3)

我不相信有内置的MATLAB函数可以做到这一点,但是这样做很容易:

sz = size(filtered_data);
[x,y] = meshgrid(1:sz(2),1:sz(1));
output = [x(:).';y(:).';reshape(filtered_data(:),[],sz(3)).'];

答案 1 :(得分:1)

没有多少神秘之处。这只是重塑数据并根据大小生成索引的事实。

rows=repmat(1:size(filtered_data,1),1,size(filtered_data,2));
cols=repelem(1:size(filtered_data,2),size(filtered_data,1));
data_time_frame1=reshape(filtered_data(:,:,1),1,[]);
data_time_frame2=reshape(filtered_data(:,:,2),1,[]);

更灵活的方法,

data_time_frame=reshape(filtered_data(:),size(filtered_data,3),[]);

只需使用这些操作填充矩阵。还需要一些时间来熟悉它们,以备将来参考