2017-02-20 3 views
0

Мне интересно, есть ли способ заставить этот код работать. Надеюсь, ясно, что я хочу делать.np.column_stack() использовать в цикле

Я надеялся, что после каждой итерации в массиве будет создана новая строка. Вместо этого кажется, что предыдущая строка перезаписана - неудивительно.

Есть ли другой способ сделать это?

list1 = [4, 5] 

for j in list1: 

      one = j + 1 
      two = j + 2 
      array = np.column_stack((one, two)) 

print(array) 

#Output 
[[ 6 7]] 

#What I actually want 
[[ 5 6] 
[ 6 7]] 

ответ

0

Естественный способ сделать это в Python будет:

import numpy 

list1 = [4,5] 
array = numpy.column_stack((j+1,j+2) for j in list1) 

print(array) 

Некоторые люди относятся к этому способу кодирования, как pythonic в то время как ваш подход больше похож на то, что можно было бы сделать в C++ или Java , Вы привыкнете к этому, если продолжите работу с Python.

Консультирование по документации numpy.colum_stack, вы увидите, что аргумент функции является кортежем столбцов, которые будут «сложены» в массив 2d. Этот кортеж может быть сформирован в виде

[(j+1,j+2) for j in list1] 

(который также действует строка кода Python). Внутри аргумента функции мы можем опустить квадратные скобки.

Ваш пример не работает, потому что вы перезаписываете массив в каждой итерации цикла. Я рекомендую использовать отладчик ... или добавить массив печати (array) внутри цикла for, чтобы лучше понять, что происходит.

+0

Спасибо. Это, похоже, не работает в моем коде, хотя –

+0

Конечно, я просто протестировал код как в python2.7, так и в python3.5, и он работает как ожидалось. Я объяснил причину, почему ваш код не работает. – thebrandre

+0

Эй, спасибо! Он работает, но не совсем для целей моего кода. Приведенный выше код является небольшим примером моего кода. Мой цикл for намного больше и содержит много вещей. Я надеялся, что будет такой же способ, как я предложил. –