【发布时间】:2017-03-05 19:14:28
【问题描述】:
我只是想简单地找到 (row, col) 的索引,它是矩阵 A 的最小点。我可以使用
[minval, imin] = min( A(:) )
和MATLAB内置函数
[irow, icol] = ind2sub(imin);
但出于效率原因,矩阵 A 是三角矩阵,我想实现以下函数
function [i1, i2] = myind2ind(ii, N);
k = 1;
for i = 1:N
for j = i+1:N
I(k, 1) = i; I(k, 2) = j;
k = k + 1;
end
end
i1 = I(ii, 1);
i2 = I(ii, 2);
此函数为以下输入返回 8 和 31
[irow, icol] = myind2ind(212, 31); % irow=8, icol = 31
如何在不使用内部“I”的情况下更有效地实现 myind2ind 函数?
【问题讨论】:
-
ind2sub非常高效且不使用循环。你确定你可以比 MATLAB 更快吗? -
我只是想自己用其他语言实现。
-
尽量不要使用 'i' 和 'j' 作为变量,因为它们是为复数的虚部保留的。
-
在您的控制台中输入
edit sub2ind,您可以看到 Mathworks 是如何实现它的。获取灵感并将其翻译成您的其他语言。您会看到 90% 的代码只是输入检查,二维矩阵的实际计算只需要几行代码。 -
我的错,我的意思是
edit ind2sub...但同样的推理。另外,如果你实现一种方式,你也可以编写反向操作。