2013-08-02 7 views
2

У меня есть MatLab операции над массивами в следующем:массив операций/нарезка в питона из MATLAB

[M,N]=size(I) ; 
J = zeros(2*M,2*N) ; 

J(1:2:end,1:2:end) = I ; 

J(2:2:end-1,2:2:end-1) = 0.25*I(1:end-1,1:end-1) + 0.25*I(2:end,1:end-1) + 0.25*I(1:end-1,2:end) + 0.25*I(2:end,2:end) ; 

J(2:2:end-1,1:2:end) = 0.5*I(1:end-1,:) + 0.5*I(2:end,:) ; 
J(1:2:end,2:2:end-1) = 0.5*I(:,1:end-1) + 0.5*I(:,2:end) ; 

Я пытаюсь переписать те же операции в питоне, и я придумал следующее:

J=numpy.zeros((2*M,2*N)) 

J[::2,::2] = I ; 

J[2:-1:2,2:-1:2] = 0.25*I[1::-1,1::-1] + 0.25*I[2::,1::-1] + 0.25*I[1::-1,2::] + 0.25*I[2::,2::] 

J[2:-1:2,1::2] = 0.5*I[1::-1,] + 0.5*I[2::,] 

J[::2,2:-1:2] = 0.5*I[:,1::-1] + 0.5*I[:,2::] 

однако код python дает мне разные результаты.

может ли кто-нибудь сказать мне, что не так?

Спасибо,

ответ

4

Проходя через этот кусок за куском, показывает, что у вас есть какая-то ошибка в ваших диапазонах. Я думаю, что вы неправильно поняли некоторые вещи о массивах в python.

  1. В отличие от MATLAB, где первый элемент массива является array[1] в Python первый элемент массива является array[0].
  2. Синтаксис разрезания массива array[start:stop:step], поэтому чтобы получить каждый второй элемент, начиная с пятого элемента в массиве до конца, вы должны сделать array[4::2].

Просто перейдите через это по частям, и вы найдете проблемы. Например, первый элемент на правой стороне второго уравнения следует:

0.25*I[0:-1, 0:-1] 

Обратите внимание, что вам не нужен второй двоеточие здесь, так как ваш step является 1, а в тех случаях, когда вы хотите изменить шаг, последний шаг.

+0

работал большой спасибо –

+1

Рад, что смог помочь. Обычно я не обманывал кого-то об этом, но, поскольку вы, кажется, здесь, здесь, я укажу, что вы должны принимать ответы, которые работают на вас, чтобы люди не возвращались к вашему вопросу, чтобы дать ответ. – Vorticity

0

так вот правильный портирован код:

J[::2,::2] = I ; 

J[1:-1:2,2:-1:2] = 0.25*I[0:-1,0:-1] + 0.25*I[1::,0:-1] + 0.25*I[0:-1,1::] + 0.25*I[1::,1::] 

J[1:-1:2,0::2] = 0.5*I[0:-1,] + 0.5*I[1::,] 

J[0::2,1:-1:2] = 0.5*I[:,0:-1] + 0.5*I[:,1::] 
Смежные вопросы