如何从.dat文件中获取一堆2d矩阵并将它们放入一个大的3d矩阵中?

时间:2013-05-17 02:41:24

标签: matlab matrix

我正在尝试将.dat文件中的所有这些2d矩阵合并到一个3d矩阵中。

所以我到目前为止所做的是:

for (i=1:40) //There are 40 of these files
fileName = ['Solutionm1.dat/Solution' num2str(i-1) '.dat'] //This line sets a file name
f=fopen(fileName,'r') //I'm just opening the file now
A{i}=fread(f,'double') //Now I'm converting the binary file into a matlab matrix
B{i}=reshape(A{i},41,21) //Now I'm putting it into the shape that I want (I don't know of a better way to read binary files)
fclose all
end

最终,我想使用norm((insert 3d matrix here),2)

来获取此3d矩阵的L2范数

我遇到的问题是我只是不知道如何将我刚制作的所有矩阵组合成一个大的3D矩阵。

解决方案

使用

T(:,:,i)=B{i}

或使用

T=cat(3,B{:})

续问题

现在不行:

norm(T,2) //Should compute the L2 norm of my 3D matrix, right?

虽然这可能超出了这个问题的范围......

据我所知,我认为规范必须用在2D矩阵上。

2 个答案:

答案 0 :(得分:1)

这是答案!

T=Cat(3,B{:}) //Combines all matrices into one single 3D matrix

答案 1 :(得分:0)

一旦你有了B,请运行:

matrix3d = zeros(41,21,40);
for i=1:40
    matrix3d(:, :, i)=B{i};
end

您还可以在循环中添加matrix3d(:, :, i)=B{i};,并在进入循环之前调用matrix3d = zeros(41,21,40);