0

嗨,我有一个 n x n 矩阵 z,它表示向量场的 z 维中的标量值。IE

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
    . . .
    . . .

等等。我在哪里错了?

谢谢

4

3 回答 3

2

试试这个

vecfield = cat(3, x,y,z)

于 2012-08-10T16:18:22.017 回答
1

无需创建xy明确:

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 动态扩展到第三维,将所有值设置为零。

于 2012-08-10T16:26:43.407 回答
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

ETC

我们可以做到这一点(它的想法,显然是使用你的 n × 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

希望有帮助!

于 2012-08-10T21:28:54.030 回答