假设我有2个变量F(i,j)
它依赖于一个矩阵的行索引和列索引的函数,我想用这些值来填充矩阵M_ij = F(i,j)
MATLAB创建矩阵M = F(I,J)
当然可以通过i
和j
或甚至只有i
或j
进行循环,如果函数F
可以是矢量化的,但我想知道这样做的简便方法。
假设我有2个变量F(i,j)
它依赖于一个矩阵的行索引和列索引的函数,我想用这些值来填充矩阵M_ij = F(i,j)
MATLAB创建矩阵M = F(I,J)
当然可以通过i
和j
或甚至只有i
或j
进行循环,如果函数F
可以是矢量化的,但我想知道这样做的简便方法。
这是不可能的回答没有看到你的F
但是让我们假设F
被矢量如
F = @(x,y)x+y;
那么你可以使用ndgrid
:
[I,J] = ndgrid(1:m,1:n);
M = F(I,J)
在上述情况下,这可能会很好也适用于你的情况,你也许可以直接使用像bsxfun
这样的东西来矢量化函数:
M = bsxfun(@plus, 0:m-1, 1:n);
无论您的功能F
是否为矢量化的,您必须对每个值i
和j
进行评估。如果F
未被矢量化,则必须手动对索引执行循环。如果F
基于MATLAB内建的像sin
,log
等,它很可能是矢量化的。在这种情况下,可以在i
和j
传递是大小为M
相同,并且在一个步骤得到的结果:
[j, i] = meshgrid(1:size(M, 2), 1:size(M, 3))
M = F(i, j)
注意meshgrid
取并返回参数X, Y
,这是矩阵的逆索引顺序row, col
。
我不明白你在问什么。你的功能是什么?什么是输入?你有什么尝试? SO不是代码写入服务。 – excaza
提供一个F的例子。如果它需要向量输入,可以传入与M相同大小的i和j,其中i的每一行相同,j的每一列相同。 –
答案完全取决于函数'F'。你需要告诉它是什么 –