3

假设我有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

的每个元素Q都是一个向量。

有没有更优雅(可能更慢)的方法来做到这一点?

4

2 回答 2

6
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]

如果 someFunction 在别处定义,使用arrayfun(@someFunction,X,Y,Z);它来获取它的句柄。(arrayfun使用参数的每个元素作为您提供的函数句柄的参数 - 它和相关的 cellfun 是避免循环的关键。)

于 2012-05-24T19:14:12.897 回答
1

WithsomeFunction是这样设计的,那么它看起来是不可能的。

您应该更改someFunction为采用矩阵并返回一个矩阵。那么问题就变成了someFunction使用矩阵运算编写特定的内容。尽管对原始问题的通用解决方案似乎是不可能的,但当您考虑特定功能(就像我在这里建议的那样)时,它是可能的。

于 2012-05-24T19:13:10.680 回答