嗨我有一个n乘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
. . .
. . .
等等。我在哪里错了?
由于
答案 0 :(得分:2)
试试这个
vecfield = cat(3,x,y,z)
答案 1 :(得分:1)
无需明确创建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扩展到第三维,将所有值设置为零。
答案 2 :(得分:1)
问题是你试图创建3个独立的n×n矩阵并强制它们进入错误的维度。相反,
vecfield = zeros(size(z),length(z),3) %because you want three arrays in the z direction
然后, vecfield(:,:,3)= z;
或者您试图获取Z的标量值并将其用作vecfield的z维大小的指示符。这是不可能的,因为尺寸设置不一致。但是,您仍然可以通过对您的vecfield中的单元格进行编号并使其他所有内容为零来表示该信息。然后它看起来像......
vecfield(:,:,1)
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
然后, vecfield(:,:,2)
0 1 2 1 0
0 1 2 1 0
0 1 2 1 0
然后, vecfield(:,:,3)
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
等
我们可以这样做(它的想法,显然使用你的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
希望有所帮助!