在matlab上从向量创建数组

时间:2013-10-28 22:15:37

标签: arrays matlab

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

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

你是否知道如何计算我想要的东西(除了使用for循环,这对于我的真实向量x,y,z的大小来说太长了。)

1 个答案:

答案 0 :(得分: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 3的4-D数组。第四维指的是所需矢量的三个元素。因此,您希望的结果[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