从相同大小的n矩阵创建张量

时间:2016-08-25 14:56:56

标签: matlab matrix multidimensional-array

我有一个张量存储在一个文件中(每行文件是一个矩阵)。在Matlab中,我想读取每一行,然后创建一个大小的张量 行数*大小(每行矩阵) 我只是想知道如何从相同大小的n矩阵创建张量?

1 个答案:

答案 0 :(得分:1)

您可以使用cat指令来创建张量 见http://www.mathworks.com/help/matlab/ref/cat.html

例:
假设您有3个矩阵:R,G和B,每个大小为100x100 使用:RGB = cat(3, R, G, B);
现在RGB是100x100x3张量。

您还可以使用以下示例:

%Initialize tensor with dimensions 3x4x5
T = zeros(3, 4, 5);

%Fill T with random 3x4 "plain" matrices:
for i = size(T, 5);
    A = rand(3, 4);
    T(:, :, i) = A;
end

读取线条,使用重塑转换为矩阵,并将矩阵放置在张量中:

假设你有一个文本文件,每一行都是一个矩阵 假设您知道矩阵大小和矩阵数,并且您想要创建张量。

我创建了以下名为rows.txt的示例文件。

1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5

以下代码,初始化3x4x5张量,读取一行,将其转换为矩阵,并插入张量:

%Initialize tensor with dimensions 3x4x5
T = zeros(3, 4, 5);

f = fopen('rows.txt', 'r');

for i = 1:5
    R = fscanf(f, '%f\n', [1, 3*4]); %Read row from file into row vector R.
    A = reshape(R, [3, 4]); %Reshape R to 3x4 matrix.
    T(:, :, i) = A;
end

fclose(f);

结果:

T(:,:,1) =

     1     1     1     1
     1     1     1     1
     1     1     1     1


T(:,:,2) =

     2     2     2     2
     2     2     2     2
     2     2     2     2


T(:,:,3) =

     3     3     3     3
     3     3     3     3
     3     3     3     3


T(:,:,4) =

     4     4     4     4
     4     4     4     4
     4     4     4     4


T(:,:,5) =

     5     5     5     5
     5     5     5     5
     5     5     5     5

另一种选择:
将整个文本文件读入矢量,并使用reshape将其转换为张量:

f = fopen('rows.txt', 'r');

%Read entire file into vector A.
A = fscanf(f, '%f');

%Reshape vector A into 3x4x5 tensor.
T = reshape(A, [3, 4, 5]);

fclose(f);