2016-08-26 8 views
2

Я работаю над преобразованием кода Matlab в Python и натолкнулся на цикл, с которым мне сложно преобразовать, поскольку я довольно новичок в обоих языках.Как преобразовать следующий цикл Matlab в Python?

if fdp >=2 
degreeTwoVector=[]; 
counter =1; 
for i = 1:numVariables 
    for j = 1:numVariables 
     degreeTwoVector(counter,:) = [i j 0]; 
     counter = counter +1; 
    end 
end 

sortedDegreeTwoVector = sort(degreeTwoVector,2); 
degreeTwoVector = unique(sortedDegreeTwoVector, 'rows'); 

combinationVector = [combinationVector; degreeTwoVector]; 
end 

Вот что я мог придумать, а превращение его в питон (неполный):

if fdp >= 2: 
    degreeTwoVector = np.array([]) 
    counter = 1 
    for i in range(1, numVariables+1): 
     for j in range(1, numVariables+1): 
     degreeTwoVector(counter, :) = np.array([i, j, 0]) 
     counter = counter + 1 
     break 
    sortedDegreeTwoVector = degreeTwoVector[np.argsort(degreeTwoVector[:, 1])] 

Я, конечно, знаю, что есть некоторые ошибки в нем. Поэтому я был бы признателен, если бы вы могли помочь мне завершить преобразование и исправить любые ошибки. Заранее спасибо!

ответ

3

Вы не за горами: Вы не нуждаетесь в инструкции break, это приводит к преждевременному разрыву петли (на первой итерации). Так вот вы идете:

numVariables = np.shape(X)[0] # number of rows in X which is given 
if fdp >= 2: 
    degreeTwoVector = np.zeros((numVariables, 3)) # you need to initialize the shape 
    counter = 0 # first index is 0 
    for i in range(numVariables): 
     for j in range(numVariables): 
      degreeTwoVector[counter, :] = np.array([i, j, 0]) 
      counter = counter + 1 # counter += 1 is more pythonic 
    sortedDegreeTwoVector = np.sort(degreeTwoVector, axis=1); 
    degreeTwoVector = np.vstack({tuple(row) for row in sortedDegreeTwoVector}) 

    combinationVector = np.vstack((combinationVector, degreeTwoVector)) 

EDIT: добавлен эквивалент кода вне цикла в исходный вопрос.

Помимо того, что я не вижу, где вы определили combinationVector, все должно быть в порядке.

+0

Извините. numVariables = size (X, 2), где X - столбец входных векторов. Кроме того, изначально комбинацияVector = [0 0 0]. Не могли бы вы также добавить перевод двух последних строк? Благодаря! – Ruffy26

+0

Извините пропущен цикл. Есть еще один цикл, который вы можете увидеть в реальном коде Matlab. – Ruffy26