繁体   English   中英

制作3D数组MATLAB

[英]Making a 3d array MATLAB

在MATLAB中

[Z,S]=meshgrid(0.01:0.01:1)

我还有一个名为X的100000x2矩阵,每一行都有两组数据-p是第一列,x是第二列。

我想计算j索引行的exp ^(-S * X(j,2))。(* Z. ^ X(j,1))。 结果应为100x100x100000矩阵。 然后将沿第3维求平均值,并生成网格图。 我尝试过使用for循环

[Z,S]=meshgrid(0.01:0.01:1)
for j=1:100000
phi(j)=exp^(-S.*X(j,2)).*(Z.^X(j,1))
end

产生我需要的100x100x100000阵列。 但这给我错误

In an assignment  A(I) = B, the number of elements in B and I must be the same.
Error in phi (line 4)
phi(j)=exp(-S.*X(j,2)).*(Z.^X(j,1));

我不确定为什么会这样吗? 谁能找到一种更好的方法来尝试找到我想要的结果? 因为我猜测可能存在完全矢量化的解决方案(或至少使用for循环)?

假设您要使用两个以上的嵌套循环来获取ZS ,因此该代码总共将具有三个嵌套循环。

现在,矢量化技术在像这样的可矢量化嵌套循环的情况下没有改变-分别处理涉及不同迭代器的代码的不同部分 因此,这里有三个迭代器,其中两个的长度为100 ,第三个的迭代器直到100000 将矢量化想法放入简洁的注释文本中,并使用基于bsxfun的代码解决您的问题-

%// Get vectorized equivalent of exp(-S.*X(j,2)) and keeping in mind that
%// since the last (3rd) dimension of final output has length same as the 
%// number of elements in X(:,2), so "throw" this to 3rd dim with permute. 
%// Then, use bsxfun to let the broadcasting being taken care off by MATLAB.
p1 = exp(-bsxfun(@times,V.',permute(X(:,2),[3 2 1]))); %//'

%// Going with same philosophy as before, get vectorized (Z.^X(j,1))
p2 = bsxfun(@power,V,permute(X(:,1),[3 2 1]));

%// Finally "merge" earlier two parts for final output
phi_out = bsxfun(@times,p1,p2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM