Я довольно часто использую команду find в матлабе, и мне интересно, как грамотно перевести это в фортран, чтобы извлечь фрагмент массива. В Matlab вы можете нарезать либо логическими, либо индексами, но в fortran вам нужны индексы для нарезки. Я знаю о пакете встроенных подпрограмм и др., но никогда их не использовал. Кроме того, поскольку я имею дело с большими матрицами, я хотел бы избежать дублирования памяти. Я хочу, чтобы нарезанная матрица управлялась внутри подпрограммы. Я где-то читал, что фрагменты массива не дублируются. Я не знаю, как это делается в Matlab. Я озадачен еще и тем, что в матлабе некоторые аллокации для вас прозрачны.
Я хотел бы знать, как воспроизвести приведенные ниже примеры, и убедиться, что я не дублирую вещи в памяти и что это действительно элегантно. В противном случае я бы забыл о нарезке и просто отправил всю матрицу (, так как она по ссылке ), и перебрал массив индексов I...
. Пример 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 )
Заранее спасибо за вашу помощь!