我有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的大小来说太长了。)
答案 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
等