嗨,我有一个 n x n 矩阵 z,它表示向量场 z 维中的标量值。
即z = 1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
X 和 Y 维度中的标量字段值为 0。我的问题是我如何取 z 并形成向量场。我尝试过类似的东西:
x = zeros(size(z));
y = x;
vecfield = [x(:) y(:) z(:)]
我期待的地方:
vecfield(:,:1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
vecfield(:,:2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
vecfield(:,:3) =
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 4 3 2 1
但是我得到:
vecfield =
0 0 1
0 0 2
0 0 3
0 0 4
. . .
. . .
等等。我哪里出错了?
谢谢
试试这个
Vecfield = cat(3, x,y,z)
问题是您试图创建 3 个单独的 n x n 矩阵并将它们强制进入错误的维度。相反
vecfield = zeros(size(z),length(z),3) %because you want three arrays in the z direction
然后 韦克菲尔德(:,:,3) = z;
或者,您正在尝试获取 Z 的标量值并将其用作 vecfield 的 z 维大小的指标。这是不可能的,因为尺寸设置不会统一。但是,您仍然可以通过对 vecfield 中的单元格进行编号并使其他所有内容为零来表示该信息。然后它看起来像...
韦克菲尔德(:,:,1)
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
然后 韦克菲尔德(:,:,2)
0 12 1 0
0 12 1 0
0 12 1 0
然后 韦克菲尔德(:,:,3)
0 01 0 0
0 01 0 0
0 01 0 0
等
我们可以这样做(它的想法,显然使用你的 n x n 维)。 也许是这样的事情,
vecfield = zeros(size(z),length(z),max(max(z)));
for n = 1 : size(vecfield,3)
vecfield(:,:,n) = z(:,:)- n;
vecfield((vecfield(:,:,n) < 0)==1) = 0;
end
希望有帮助!
无需显式创建x
和y
:
z = [1 2 3 4 5 4 3 2 1;
1 2 3 4 5 4 3 2 1;
1 2 3 4 5 4 3 2 1;
1 2 3 4 5 4 3 2 1;
1 2 3 4 5 4 3 2 1];
vecfield = z; % vecfield 5 x 9 (x 1)
vecfield(:,:,2:3) = 0;
最后一个命令动态地将 vecfield 扩展到第三维,将所有值设置为零。