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