2013-07-30 3 views
0

Я пытаюсь скрывать некоторый код Matlab для Python. У меня проблемы с нарезкой.Matlab Vs Python: Slicing

Matlab код:

demod_1_b=-1*mod_noisy*2.*sin(2*pi*Fc*t+phi); 
y = filter(Hd,demod_1_b); 
y2=conv(y,raised)/ConvFac; 
%% till this line the length in python and Matlab are same 
y2=y2(sa/2:end-(sa/2)); 
%%%% when i write this line in Python it gives me wrong answer it should come out as 26  but in python it gives me 33 i think i havnt converted it in a rigth way 
demod_3_b=y2(sa/2:sa:end); 

Python код:

demod_1_b=-1*mod_noisy*2*sin((2*pi*Fc*t)+phi) 

N=10 
Fc=40 
Fs=1600 
d=firwin(numtaps=N,cutoff=40,nyq=Fs/2) 
print(len(d)) 
Hd=lfilter(d, 1.0, demod_1_b) 
y2=(convolve(Hd,raised))/Convfac 
print(len(y2)) 
y2=y2[(sa/2)-1:-sa/2] 
print(len(y2)) 
# problem starts here 
demod_3_b=y2[(sa/2)-1:sa:,] 
print(len(demod_3_a)) 

Я просто хочу спросить, demod_3_b=y2(sa/2:sa:end); в Matlab и demod_3_v=y2[(sa/2)-1:sa:,] в Python же?

+0

Извините, не могу написать весь код, очень большой –

+3

Что вы даже пытаетесь сделать? Можете ли вы обрезать код до краткого, автономного, исполняемого фрагмента, который демонстрирует проблему? – user2357112

ответ

2

Да, ваше индексирование неверно. В NumPy, следующий indexing применяется:

Базовый синтаксис является срез я: J: K, где я это начальный индекс, J является индексом остановки, и к это шаг (к ≠ 0).

Следовательно, то, что вы ищете в Питоне:

y2[(sa/2)-1::sa] 

В отличие от Matlab, то размер шага последний вход. Поскольку вы хотите обработать всю длину массива, не ставьте ничего между двумя :.

+0

thaks было действительно полезно –