0

我有 3 个向量 x、y 和 z。如何创建一个数组 a 使得 a(i,j,k) = [x(i),y(j),z(k)]?

我试过了

a(:,:,1) = [[1,2];[3,4]]

但得到了

Subscripted assignment dimension mismatch.

评论后编辑

基本上我首先想从x,y,z创建一个数组a,但这是我最初的问题(所以我认为创建一个向量会更好):我有三个向量:x,y,z,说x = [1 2 3], y = [4,3,2] z = [1,3,2]

我想使用数组计算每个 [x_i,y_j,z_k] 的高斯概率函数。所以我首先尝试将 mvnpdf 与数组 a 一起使用:

a = rand(3,3,3) < 0.1

mvnpdf(a,[1,2,3],eye(3))

但是matlab返回了以下错误:

Error using mvnpdf (line 46)
X must be a matrix.

显然,他对我使用数组不满意。

你知道我如何计算我想要的吗(除了使用对于我的真实向量 x、y、z 的大小来说需要太长时间的 for 循环)。

4

1 回答 1

2

你可以这样做:

x = [10 20 30 40 50]; % example x
y = [100 200 300 400]; % example y
z = [1000 2000 3000]; % example z.    

[ii jj kk] = ndgrid(1:length(x), 1:length(y), 1:length(z));
a = cat(4, x(ii), y(jj), z(kk));

结果a是一个大小为length(x)x length(y)x length(z)x的 4-D 数组3。第四个维度是指所需向量的三个元素。因此,您想要的结果[x(i),y(j),z(k)]将由 给出a(i,j,k,:),或者更确切地说squeeze(a(i,j,k,:)).'。例如,

>> squeeze(a(1,2,3,:)).'
ans =
          10         200        3000

根据您的评论,并感谢@chappjc:如果您希望所有这些向量按字典顺序堆积为三列矩阵的行,只需使用:

[kk jj ii] = ndgrid(1:length(z), 1:length(y), 1:length(x));
b = [x(ii(:)).' y(jj(:)).' z(kk(:)).'];

结果:

>> b(1,:)
ans =
          10         100        1000

>> b(2,:)
ans =
          10         100        2000

等等

于 2013-10-28T22:35:59.477 回答