2014-01-06 33 views
0

Я работаю над преобразованием кода matlab в python.
Я не понимаю эти 2 строки кода.преобразование matlab в код python

d1 = s(1:3,2) - s(1:3,1); 
d2 = s(1:3,end) - s(1:3,end-1); 

что эти 2 линии делают? может ли кто-нибудь объяснить мне?
и как я могу преобразовать это в python?

+0

Попробуйте распечатать результаты поиска по частям в MATLAB? Что ты получил? – Christian

+0

У меня нет matlab, но мне нужно сделать преобразование – sam

+2

Попробуйте [this] (http://www.compileonline.com/execute_matlab_online.php) запустить код MATLAB онлайн. – Christian

ответ

2

s является матрицей. s (1: 3,2) создает вектор из строк с 1 по 3 и столбец 2. s (1: 3,1) создает вектор из строк с 1 по 3 и столбец 1. d1 является затем другим вектором, являющимся элемент по разности элементов

end - специальный синтаксис для последней строки или столбца. Конец-1 является предпоследним строк/столбцов

1

d1: разница между 2-м столбце и 1-го столбца первых 3 рядов s

d2: разница между последней колонке и одному перед последней колонке первым 3 ряда s

Вы можете проверить это online

3

В Matlab:

% Matlab 
s = [1,2,3,4,5; ... 
    6,7,8,9,10; ... 
    11,12,13,14,15]; 
d1 = s(1:3,2) - s(1:3,1); 
d2 = s(1:3,end) - s(1:3,end-1); 

disp('--s--') 
disp(s) 
disp('--d1--') 
disp(d1) 
disp('--d2--') 
disp(d2) 

disp('--s(1:3,2)--') 
disp(s(1:3,2)) 
disp('--s(1:3,1)--') 
disp(s(1:3,1)) 

disp('--s(1:3,end)--') 
disp(s(1:3,end)) 
disp('--s(1:3,end-1)--') 
disp(s(1:3,end-1)) 

могут быть переведены на Python как:

# Python 
import numpy as np 

s = np.asarray([ \ 
    1,2,3,4,5, \ 
    6,7,8,9,10, \ 
    11,12,13,14,15]).reshape(3,-1); 
d1 = s[0:3,1] - s[0:3,0]; 
d2 = s[0:3,-1] - s[:3,-2]; 

print '--s--' 
print s 
print '--d1--' 
print d1 
print '--d2--' 
print d2 

print '--s[0:3,1]--' 
print s[0:3,1] 
print '--s[0:3,0]--' 
print s[0:3,0] 

print '--s[0:3,-1]--' 
print s[0:3,-1] 
print '--s[0:3,-2]--' 
print s[0:3,-2] 

Результаты Matlab:

--s-- 
    1 2 3 4 5 
    6 7 8 9 10 
    11 12 13 14 15 
--d1-- 
    1 
    1 
    1 
--d2-- 
    1 
    1 
    1 
--s(1:3,2)-- 
    2 
    7 
    12 
--s(1:3,1)-- 
    1 
    6 
    11 
--s(1:3,end)-- 
    5 
    10 
    15 
--s(1:3,end-1)-- 
    4 
    9 
    14 

против Питона:

--s-- 
[[ 1 2 3 4 5] 
[ 6 7 8 9 10] 
[11 12 13 14 15]] 
--d1-- 
[1 1 1] 
--d2-- 
[1 1 1] 
--s[0:3,1]-- 
[ 2 7 12] 
--s[0:3,0]-- 
[ 1 6 11] 
--s[0:3,-1]-- 
[ 5 10 15] 
--s[0:3,-2]-- 
[ 4 9 14] 

Они совпадают.

Оценка Matlab код онлайн /here/ и код Python /here/, /here/ и с пакетами /here/.

+0

Я бы предпочел 'np.array ([[1,2,3,4,5], [6,7,8, 9,10], [11,12,13,14,15]]) 'там - обратите внимание, что вам не нужно' \ 'продолжать строку внутри' {[(' – Eric

+0

@ Эрик. Ваша точка полностью верна. Мы просто старались максимально упростить перевод «Python», похожий на «Matlab». – Developer

+0

Кроме того, вы действительно не должны использовать точки с запятой в python – Eric

Смежные вопросы