Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 基于matlab的矢量数组生成_Arrays_Matlab - Fatal编程技术网

Arrays 基于matlab的矢量数组生成

Arrays 基于matlab的矢量数组生成,arrays,matlab,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]上

我有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
显然,他不喜欢我使用数组


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

你可以这样做:

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
的四维数组。第四维是指所需向量的三个元素。所以你想要的结果
[x(i),y(j),z(k)]
将由
a(i,j,k,:)
给出,或者更确切地说是
挤压(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

等等。

你想让a(i,j,k)成为一个向量吗?a=[x(:)y(:)z(:)]做你想做的吗?似乎
mvnpdf(a,…)
需要第一个输入参数
a
N-by-D
@chappjc,这并不是因为我想计算所有组合x(I),y(j),z(k)的mvnpdf(我想你的解决方案只会给我x(I),y(I),z(I)的mvnpdf)是吗?是的,我现在明白了。路易斯的答案对所有组合都很好。@teaLeef-如果你明确说明了x,y,z在输出
N-by-D
矩阵中的变化顺序,那会很有帮助。a(1,2,3,:)仍然是一个4-D数组。还有什么方法可以代替向量吗?(因为我使用数组时从mvnpdf得到的错误)?谢谢,请看我的答案。
squage(a(1,2,3,:)
是列向量,
squage(a(1,2,3,:)。
是行向量。@teaLeef注意,使用
meshgrid
而不是
ndgrid
会给出错误的结果。例如,对于我的示例数据
squage>squage(a(2,4,3,:))
将给出402003000,这是错误的。因此
ndgrid
是正确的方法。@teaLeef我现在明白了。试试
b=[x(ii(:)y(jj(:)z(kk(:)];
。检查结果order@teaLeef-如果您决定以不同的方式使用它,您可以随时通过对
ndgrid
的输入/输出重新排序来更改顺序,记住第一个输入/输出对变化最快,然后是第二个,以此类推。这就是为什么
ndgrid
meshgrid
IMO更直观的原因这都是我的,答应我!
>> b(1,:)
ans =
          10         100        1000

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