Как преобразовать индексирование Matlab в Python

#python #matlab #indexing

Вопрос:

 data_tp0 = xlsread(append(con,'_',treatment,string(hrt),'_t',string(tps(1)),'_analysis.xlsx'));
Time_tp0=data_tp0(:,1);

signal_tp0=(data_tp0(:,2));
% signal = sin(Time);   %%  Raw signal with time period of ~6.5 sec i.e. Freq = 1/6.5 = 0.15 Hz
L = length(Time_tp0);
Fs= L/max(Time_tp0);     % Sampling frequency                    
T = 1/Fs;             % Sampling period  


Y_tp0 = fft(signal_tp0);                          % Compute DFT of Signal and get real and imaginary components
P2_tp0 = abs(Y_tp0/L);                            % Whole spectrum
P1_tp0 = P2_tp0(1:L/2 1);                         % One-sided spectrum
P1_tp0(2:end-1) = 2*P1_tp0(2:end-1);              % Even-valued signal length L.
 

Что означает односторонняя линия спектра? В частности, в

 1:L/2 1 inside of the P2_tp0(1:L/2 1)
 

Что означает эта индексация? Каков его эквивалент в python?

Аналогично, что означает индексация для этой строки кода и ее эквивалента в python?

 P1_tp0(2:end-1) = 2*P1_tp0(2:end-1)
 

Комментарии:

1.в Python вы также можете использовать data[1:L/2 1] , что означает start = 1 , end = L/2 1 data[start:end] . И если вы используете numpy.array с 2D массивом, то вы можете использовать даже array[y_start:y_end, x_start:x_end] или array[y_start:y_end, x_index] или array[ : , x_index] как в data_tp0(:,2)

2. также обратите внимание, что индексация matlab является конечной, в то время как python-нет. a[1:3] в matlab это 3 элемента, а a[1:3] в numpy-2 элемента.

3. в matlab start:stop обычно используется для создания вектора или для индексации существующего вектора, в данном случае вы используете второй… здесь вы переходите от первого индекса вектора к индексу L/2 1.. в python вы можете выполнить тот же вызов P2_tp0[0:L/2] или просто P2_tp0[:L/2] получить фрагмент исходного вектора (или массива).

4. Примечание также индексы matlab начинаются с 1 , в то время как python начинается с 0