Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 紧凑的MATLAB矩阵索引符号

我有一个n×k大小的矩阵,每行包含k个数字。我想将这些k数字用作k维矩阵的索引。在MATLAB中是否有任何紧凑的方式来执行此操作,还是必须使用for循环?

这是我想做的(在MATLAB伪代码中),但采用的是类似MATLAB的方式:

for row=1:1:n finalTable(row) = kDimensionalMatrix(indexmatrix(row, 1),... indexmatrix(row, 2),...,indexmatrix(row, k)) end
回答:
如果要避免使用for循环,这可能是最干净的方法:

indexCell = num2cell(indexmatrix, 1); linearIndexMatrix = sub2ind(size(kDimensionalMatrix), indexCell{:}); finalTable = kDimensionalMatrix(linearIndexMatrix); 第一行使用num2cell将indexmatrix每一列放入单元格数组的单独单元格中。这使我们可以将所有k列作为逗号分隔的列表 sub2indsub2ind ,此函数将下标索引 (行,列等)转换为线性索引 (每个矩阵元素从1到N编号, N为总数)矩阵中的元素数)。最后一行使用这些线性索引替换您的for循环。在这里可以找到有关矩阵索引(下标,线性和逻辑)的很好的讨论。

一些值得深思的食物...

倾向于矢量化解决方案而避开for循环的趋势是许多MATLAB用户(包括我本人)已经习惯的事情。但是,较新版本的MATLAB可以更有效地处理循环。正如在对另一个SO问题的回答中所讨论的那样,使用for循环有时会导致代码运行速度比矢量解决方案快。

我当然不是在说您不应该再对代码进行矢量化处理,只是每个问题都是唯一的。向量化通常会更有效,但并非总是如此 。对于您的问题,for循环与矢量化代码的执行速度可能取决于值n和k大小。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 19:48


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.