Fortran эквивалентно Matlab find -приложение для нарезки матрицы без дублирования памяти

Я довольно часто использую команду 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 )

Заранее спасибо за вашу помощь!

5
задан e-malito 27 July 2012 в 16:30
поделиться