假设我有x,y,z长度的向量n,m,l.我想Q使用这些向量的元素创建一个单元矩阵.天真地可以使用for循环:
for i = 1:n
for j = 1:m
for k = 1:l
Q{i,j,k} = someFunction(x(i), y(j), z(k));
end
end
end
Run Code Online (Sandbox Code Playgroud)
每个元素Q都是一个向量.
有没有更优雅(可能更慢)的方式来做到这一点?
x=[1 2 3 4];
y=[5 6];
z=[7 8 9];
[X Y Z]=meshgrid(x,y,z);
someFunc = @(a,b,c)[a b c]; #% test function; use whatever you want
Q = arrayfun(someFunc,X,Y,Z,'UniformOutput',false);
Q{1,1,1} #% output: [1 5 7]
Run Code Online (Sandbox Code Playgroud)
如果someFunction在别处定义,则使用arrayfun(@someFunction,X,Y,Z);获取它的句柄.(arrayfun使用参数的每个元素作为你提供的函数句柄的args - 它和相关的cellfun,是避免循环的关键.)
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |