生成多维数组(张量)

在为高维数组赋值的时候, 希望同时对多个维度赋相同的值, 如

A = zeros(3,3,5);
B = eye(3);

考虑将 \(A\) 的 5 个维度矩阵的值都设为 \(B\).
注意! 此处是错误语法 直接使用如下的语法会报错

A(:,:,1:5) = B; % 报错内容: 赋值具有的非单一 rhs 维度少于非单一下标数

正确的做法是先利用 \(B\) 生成一个与 \(A\) 维度相同的高维数组, 再对 \(A\) 进行赋值, 此时赋值前需要如下操作(即生成每个维度的矩阵都是 \(B\) 且大小为 (3,3,5) 的数组)

C = repmat(B, [1,1,5]);
A = C;

此外, 生成高维数组的函数还有 cat, 使用方法如下

A = eye(3);
dim = 3;
B = cat(dim, A, 2*A, 3*A)

% B(:,:,1) =
%      1     0     0
%      0     1     0
%      0     0     1
% B(:,:,2) =
%      2     0     0
%      0     2     0
%      0     0     2
% B(:,:,3) =
%      3     0     0
%      0     3     0
%      0     0     3

但是当需要赋值的维数较高时, 属实有点不方便.

posted @ 2021-11-26 20:19  DifDay哒哒哒  阅读(127)  评论(0编辑  收藏  举报