设M为矩阵:
M = rand(1000, 2000);考虑以下代码示例:
A = zeros(size(M));
for row = 1:1000
for col = 1:2000
A(row, col) = M(row,col)*(row + col);
end
end如何计算不带A循环的矩阵for?
有arrayfun函数,但我不知道如何获得当前元素的索引:
A = arrayfun(@(x)(x*(index(1) + index(2))), M); %// but how to get index???也许还有其他的解决方案(而且没有额外的循环)?
发布于 2013-09-03 15:56:23
你可以做一些简单的事情,如下所示,得到一个表示row+col的矩阵,然后乘以M。
M = rand(1000, 2000);
rowPlusCol = bsxfun(@plus,(1:size(M,1)).',1:size(M,2));
A = M.*rowPlusCol;根据我的经验,bsxfun是一个功能非常强大的函数,肯定可以节省一些运行时间,这是一个很好的例子。
发布于 2013-09-03 16:14:34
这里有另一种解决方案,为多样性而夸耀另一种花哨的单线:
A = M .* hankel(2:size(M, 1) + 1, size(M, 1) + 1:sum(size(M)));发布于 2013-09-03 16:01:15
我认为用arrayfun是不可能的。
您可以使用网格获取行号和列号,然后进行一些简单的矩阵计算。
M = rand(1000, 2000);
[cols,rows] = meshgrid(1:size(M,2), 1:size(M,1));
A = M .* (cols + rows);https://stackoverflow.com/questions/18596454
复制相似问题