![]() |
紧凑的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); 第一行使用[URL="https://www.mathworks.com/help/matlab/ref/num2cell.html"]num2cell[/URL]将indexmatrix每一列放入单元格数组的单独单元格中。这使我们可以将所有k列作为[URL="https://www.mathworks.com/help/matlab/matlab_prog/comma-separated-lists.html"]逗号分隔的列表[/URL] [URL="https://www.mathworks.com/help/matlab/ref/sub2ind.html"]sub2ind[/URL]给[URL="https://www.mathworks.com/help/matlab/ref/sub2ind.html"]sub2ind[/URL] ,此函数将[I]下标索引[/I] (行,列等)转换为[I]线性索引[/I] (每个矩阵元素从1到N编号, N为总数)矩阵中的元素数)。最后一行使用这些线性索引替换您的for循环。在[URL="http://www.mathworks.com/company/newsletters/digest/sept01/matrix.html"]这里[/URL]可以找到有关矩阵索引(下标,线性和逻辑)的很好的讨论。 [B]一些值得深思的食物... [/B] 倾向于矢量化解决方案而避开for循环的趋势是许多MATLAB用户(包括我本人)已经习惯的事情。但是,较新版本的MATLAB可以更有效地处理循环。正如在对另一个SO问题的[URL="https://stackoverflow.com/a/831964/52738"]回答中[/URL]所讨论的那样,使用for循环有时会导致代码运行速度比矢量解决方案快。 我当然不是在说您不应该再对代码进行矢量化处理,只是每个问题都是唯一的。向量化[I]通常[/I]会更有效,但并非[I]总是如此[/I] 。对于您的问题,for循环与矢量化代码的执行速度可能取决于值n和k大小。 [url=https://stackoverflow.com/questions/792683]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:28。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.