У меня есть следующий код, который выполняет некоторую сортировку по matlab, но полагается на eval. Это часть гораздо большего набора кода, и я упростил его, чтобы его можно было разместить здесь. В принципе, я ищу простой способ избавиться от функции eval, так что я могу использовать инструкцию parfor ранее в коде.Прозрачность - заменить EVAL в matlab
t = 1;
N = 1500;
BM = rand(N,1);
P1 = rand(N,12);
nport = 10;
tSpan = t : t + 11;
pointer = round([1; N*.10; N*.20; N*.30; N*.40;N*.50; N*.60; N*.70; N*.80; N*.90; N]); % pointers used in sorting
IndStru = struct('idp1', [], 'idp2', [], 'idp3', [], 'idp4', [], 'idp5',[],'idp6', [], 'idp7', [], 'idp8', [], 'idp9', [], 'idp10',[]);
[ssize, sInd] = sort(BM); clear ssize
ids1 = sInd(pointer(1) : pointer(2));
ids2 = sInd(pointer(2) + 1 : pointer(3));
ids3 = sInd(pointer(3) + 1 : pointer(4));
ids4 = sInd(pointer(4) + 1 : pointer(5));
ids5 = sInd(pointer(5) + 1 : pointer(6));
ids6 = sInd(pointer(6) + 1 : pointer(7));
ids7 = sInd(pointer(7) + 1 : pointer(8));
ids8 = sInd(pointer(8) + 1 : pointer(9));
ids9 = sInd(pointer(9) + 1 : pointer(10));
ids10 = sInd(pointer(10) + 1 : pointer(11)); clear sInd
for i = 1 : nport
eval(['IndStru.idp' num2str(i) '=ids' num2str(i) ';' ]);
eval(['p10(' num2str(i) ',' num2str(tSpan(1)) ':' num2str(tSpan(12)) ') = sum(P1(IndStru.idp' num2str(i) ', tSpan))']);
end
Ваш пример не работает, в частности строка 24, а также отсутствующий символ 'for'. Что касается первого 'eval', посмотрите на [Generate Field Names from Variables] (http://se.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html), второй может просто уточняйте, нет необходимости в струнах. –
Спасибо. При преобразовании моего кода для этого MWE была опечатка. Теперь все должно быть хорошо. Я посмотрю на ссылку, которую вы опубликовали. – phdstudent
На самом деле, я думаю, вы ошибетесь по этому поводу? Структуры с пронумерованными полями кажутся странными. Что вы пытаетесь решить. –