我有一个任意维度A
x m
的矩阵n
,并希望使用等式填充它,例如,A
的每个元素a_ij,i = 1,...,m和j = 1,...,n,我想,
a_ij = i ^ 2 + j ^ 2.
在手动填写的Matlab中,它看起来与此类似,
A = [1^2+1^2, 1^2+2^2, ..., 1^2+j^2, ..., 1^2+n^2;
2^2+1^2, 2^2+2^2, ..., 2^2+j^2, ..., 2^2+n^2;
.
.
.
i^2+1^2, i^2+2^2, ..., i^2+j^2, ..., i^2+n^2;
.
.
.
m^2+1^2, m^2+2^2, ..., m^2+j^2, ..., m^2+n^2]
所以前几个术语是:
[2, 5, 10,17,...
5, 8, 13,20,...
10,13,18,25,...
17,20,25,32,...
]
答案 0 :(得分:8)
bsxfun
的解决方案 -
A = bsxfun(@plus,[1:m]'.^2,[1:n].^2)
bsxfun
对array expansion
执行singleton dimensions
(即元素数量等于1的维度)并执行elementwise operation specified by the function handle
这将是bsxfun
调用的第一个输入参数。
因此,对于我们的情况,如果我们使用column vector (mx1
)和row vector (1xn)
,那么使用列出的bsxfun
代码,这两个向量都会扩展为2D matrices
和将执行elementwise summation of elements
(因为函数句柄 - @plus),为我们提供所需的2D输出。所有这些步骤都由MATLAB内部执行。
注意:这对于运行时性能非常有效,因为bsxfun
非常适合这些expansion
相关问题,如前所述。
答案 1 :(得分:4)
使用ndgrid
的替代方案:
[I, J] = ndgrid(1:m, 1:n);
A = I.^2 + J.^2;