首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组中二维矩阵当前元素的索引

数组中二维矩阵当前元素的索引
EN

Stack Overflow用户
提问于 2013-09-03 15:48:18
回答 3查看 1K关注 0票数 3

M为矩阵:

代码语言:javascript
运行
复制
M = rand(1000, 2000);

考虑以下代码示例:

代码语言:javascript
运行
复制
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函数,但我不知道如何获得当前元素的索引:

代码语言:javascript
运行
复制
A = arrayfun(@(x)(x*(index(1) + index(2))), M); %// but how to get index???

也许还有其他的解决方案(而且没有额外的循环)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-03 15:56:23

你可以做一些简单的事情,如下所示,得到一个表示row+col的矩阵,然后乘以M。

代码语言:javascript
运行
复制
M = rand(1000, 2000);
rowPlusCol = bsxfun(@plus,(1:size(M,1)).',1:size(M,2));
A = M.*rowPlusCol;

根据我的经验,bsxfun是一个功能非常强大的函数,肯定可以节省一些运行时间,这是一个很好的例子。

票数 3
EN

Stack Overflow用户

发布于 2013-09-03 16:14:34

这里有另一种解决方案,为多样性而夸耀另一种花哨的单线:

代码语言:javascript
运行
复制
A = M .* hankel(2:size(M, 1) + 1, size(M, 1) + 1:sum(size(M)));
票数 2
EN

Stack Overflow用户

发布于 2013-09-03 16:01:15

我认为用arrayfun是不可能的。

您可以使用网格获取行号和列号,然后进行一些简单的矩阵计算。

代码语言:javascript
运行
复制
M = rand(1000, 2000);
[cols,rows] = meshgrid(1:size(M,2), 1:size(M,1));
A = M .* (cols + rows);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18596454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档