Я пытаюсь преобразовать следующий код MatLab в Python:
for i = 1:n
I = (sum((N==M(1,i))+(N==M(2,i)))==2);
P(:,i) = pit(:,I);
Вот моя текущая попытка:
for i in range(0,n):
I = [sum(int(N == M)(1,i)) + int((int(N == M)(2,i))) == 2]
, которая вызывает ошибку:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Следующий код Python, который я уже перевел (думаю, правильно), предшествует коду, с которым я борюсь:
M = np.array(mypitches).transpose()
n = M.size
P = np.zeros((3,n))
pit = pitches(h,-8,12)
N = np.array(['Fb','Cb','Gb','Db','Ab','Eb','Bb','F-','C-','G-','D-','A-','E-','B-','F#','C#','G#','D#','A#','E#','B#']).transpose()
Полный код MatLab:
function [P] = position(h,mypitches);
% position.m : gives pitch positions given
% h = aspect ratio
% mypitches = a list of pitch names from Fb-B#
% returns
% P = a list of corresponding pc spiral positions
%
% created by EC, 20 Nov 1998; updated 28 Aug 2013
%
% usage: [P] = position(mypitches)
% example: position(['Bb';'C-']);
M = mypitches';
[m,n] = size(M);
P = zeros(3,n);
pit = pitches2(h,-8,12);
N = ['Fb';'Cb';'Gb';'Db';'Ab';'Eb';'Bb';'F-';'C-';'G-';'D-';'A-';'E-';'B-';'F#';'C#';'G#';'D#';'A#';'E#';'B#']';
for i = 1:n
I = (sum((N==M(1,i))+(N==M(2,i)))==2);
P(:,i) = pit(:,I);
end;