我在 matlab 中使用 find 很多命令,我想知道如何在 fortran 中巧妙地翻译它以提取数组的一部分。在 matlab 中,您可以使用逻辑或索引进行切片,但在 fortran 中,您需要索引来切片。我知道内部子程序包等,但从未使用过它们。另外,由于我正在处理大矩阵,我想避免重复内存。我希望在子程序中操作切片矩阵。我在某处读到数组切片没有重复。我不知道这是如何在 matlab 中进行切片的。我也很困惑,因为在 matlab 中,一些分配对你来说是透明的。
我想知道如何重现下面的示例,并确保我没有在内存中复制内容,并且这样做实际上很优雅。否则,我会忘记切片,只发送整个矩阵(因为它是通过引用)并循环遍历索引数组我......
Matlab示例1:简单复现find
v=[1 2 3 4];
I=find(v==3);
Matlab示例2:
m=rand(4,4);
bools=logical([ 1 0 0 1]);
I=find(bools==1);
% which I could also do like:
I=1:size(m,1);
I=I(bools);
for i=1:length(I)
% here dealing with m(I(i)),:) and do some computation
% etc.
示例 3:只调用 m(I,:) 上的子程序,但直接使用布尔值进行切片
foo( m(bools, :) , arg2, arg3 )
预先感谢您的帮助!