Конвертировать Matlab в Python - PullRequest
0 голосов
/ 18 октября 2019

Я конвертирую код Matlab в Python, и у меня возникли большие сомнения по поводу следующей строки кода:

BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

Весь код такой:

BD_teste = [];
por_treino = 0;
for l = 1:k
    quant_elementos_t = int64((length(grupos.(['g',int2str(l)]).('elementos')) * por_treino)/100);
    for element_c = 1 : quant_elementos_t
        ind_element = randi([1 length(grupos.(['g',int2str(l)]).('elementos'))]);
        BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];
        grupos.(['g',int2str(l)]).('elementos')(ind_element,:) = [];
    end
end

Эта строка кода ниже представляет собой структуру, так как я конвертирую в python, я использовал список, а внутри него словарь со списком 'elementos':

'g',int2str(l)]).('elementos')

Так что мой вопрос только вСтрока, которую я цитировал выше, мне было интересно, что происходит и как это происходит, и как я буду писать на python.

Заранее большое спасибо.

1 Ответ

1 голос
/ 18 октября 2019

BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

Одна очень странная строка. Давайте разберем его на части:

int2str(l) возвращает число l в виде массива char (будет охватывать от '1' до k).

['g',int2str(l)] возвращает массив charg1, затем g2 и т. Д. Вместе со значением l.

grupos.(['g',int2str(l)]) вернет значение поля с именем g1, g2 и т. Д., Которое принадлежиттеперь структура grupos.

grupos.(['g',int2str(l)]).('elementos') предполагает, что grupos.(['g',int2str(l)]) сама является структурой, и возвращает значение ее поля с именем 'elementos'.

grupos.(['g',int2str(l)]).('elementos')(ind_element,:) Предполагая, что grupos.(['g',int2str(l)]) - это матрица, эта строка возвращает линейный вектор, содержащий ind_element -ю строку указанной матрицы.

grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l добавляет число 1 к вектору, полученному ранее.

[BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l] добавляет вектор-строку [grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l] к матрице BD_teste внизу. и создает новую матрицу.

Наконец: BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];``assignes the value of the obtained matrix to the variable BD_teste`, перезаписывая его предыдущее значение. По сути, это просто добавляет новую строку, но из-за шага перезаписи это не очень эффективно.

Рекомендуется добавить: BD_teste(end+1,:) = [grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

Теперь, как вы будетепереписать это в Python - это совсем другая история, и будет зависеть от того, как вы хотите определить переменную grupos в основном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...