1

.dat ファイルにあるこれらすべての 2D マトリックスを 1 つの 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

最終的に、この 3 次元行列の L2 ノルムを次のように取りたいと思います。norm((insert 3d matrix here),2)

私が抱えている問題は、作成したばかりのすべてのマトリックスを 1 つの大きな 3D マトリックスに結合する方法がわからないことです。

解決

使用する

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

または使用

T=cat(3,B{:})

継続する問題

これは現在動作しません:

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

これはこの質問の範囲外かもしれませんが...

私が学んだことから、ノルムは 2D マトリックスで使用する必要があると思います。

4

2 に答える 2

1

これが答えです!

T=Cat(3,B{:}) //Combines all matrices into one single 3D matrix
于 2013-05-17T03:08:12.983 に答える
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);ます。

于 2013-05-17T03:05:21.657 に答える