Обмен столбцами в массиве numpy?

from numpy import * def swap_columns(my_array, col1, col2): temp = my_array[:,col1] my_array[:,col1] = my_array[:,col2] my_array[:,col2] = temp 

затем

 swap_columns(data, 0, 1) 

Не работает. Однако вызов кода напрямую

 temp = my_array[:,0] my_array[:,0] = my_array[:,1] my_array[:,1] = temp 

Имеет ли. Почему это происходит и как я могу это исправить? Ошибка говорит, что «IndexError: массивы 0-d могут использовать только один () или список newaxes (и один …) как индекс», что означает, что аргументы не являются ints? Я уже пытался преобразовать cols в int, но это не решило его.

3 Solutions collect form web for “Обмен столбцами в массиве numpy?”

Здесь есть два вопроса. Во-первых, data вы передаете своей функции, по-видимому, не являются двумерным массивом NumPy – по крайней мере, это то, о чем говорится в сообщении об ошибке.

Вторая проблема заключается в том, что код не выполняет то, что вы ожидаете:

 my_array = numpy.arange(9).reshape(3, 3) # array([[0, 1, 2], # [3, 4, 5], # [6, 7, 8]]) temp = my_array[:, 0] my_array[:, 0] = my_array[:, 1] my_array[:, 1] = temp # array([[1, 1, 2], # [4, 4, 5], # [7, 7, 8]]) 

Проблема в том, что базовая нарезка Numpy не создает копии фактических данных, а представляет собой представление для одних и тех же данных. Чтобы выполнить эту работу, вам нужно либо явно скопировать

 temp = numpy.copy(my_array[:, 0]) my_array[:, 0] = my_array[:, 1] my_array[:, 1] = temp 

или использовать расширенную нарезку

 my_array[:,[0, 1]] = my_array[:,[1, 0]] 

Я считаю следующее быстрее:

 my_array[:, 0], my_array[:, 1] = my_array[:, 1], my_array[:, 0].copy() 

Анализ времени:

 import numpy as np my_array = np.arange(900).reshape(30, 30) 

как следует:

 %timeit my_array[:, 0], my_array[:, 1] = my_array[:, 1], my_array[:, 0].copy() The slowest run took 15.05 times longer than the fastest. This could mean that an intermediate result is being cached 1000000 loops, best of 3: 1.72 µs per loop 

Расширенные времена среза:

 %timeit my_array[:,[0, 1]] = my_array[:,[1, 0]] The slowest run took 7.38 times longer than the fastest. This could mean that an intermediate result is being cached 100000 loops, best of 3: 6.9 µs per loop 

Основываясь на ответе @ Свена:

 import numpy as np my_array = np.arange(9).reshape(3, 3) print my_array [[0 1 2] [3 4 5] [6 7 8]] def swap_cols(arr, frm, to): arr[:,[frm, to]] = arr[:,[to, frm]] swap_cols(my_array, 0, 1) print my_array [[1 0 2] [4 3 5] [7 6 8]] def swap_rows(arr, frm, to): arr[[frm, to],:] = arr[[to, frm],:] my_array = np.arange(9).reshape(3, 3) swap_rows(my_array, 0, 2) print my_array [[6 7 8] [3 4 5] [0 1 2]] 
  • Сохранение объекта KDTree в Python?
  • Управление левой матрицей и решение Numpy
  • преобразование 2d-словаря в матрицу numpy
  • Создайте большую матрицу из меньших матриц в numpy
  • Как рассортировать объекты инфузии numpy?
  • Нечетные простые множители больших чисел
  • Как индексировать массив 0-d в Python?
  • Как построить линию сетки только с помощью pcolor / pcolormesh
  •  
    Interesting Posts for Van-Lav

    Как я могу получить доступ к загруженному файлу в режиме универсальной-новой строки?

    Почему json.loads на порядок быстрее, чем ast.literal_eval?

    py2exe ImportError: нет модуля с именем <package I immedmented>

    Найти точки в ячейках через pandas dataframes координат

    Удаленная отладка на pycharm

    Pandas, проверьте, существует ли значение временной метки в повторно сэмплированном 30-минутном временном буфере datetimeindex

    Автозаполнение не работает с PyQT4 и PyKDE4 в большинстве IDE

    Python: конвертировать тайм-код UTC в метку времени UTC

    mailx не работает с подпроцессом

    Как читать изображение из StringIO в PIL в python

    Используя PIL и NumPy, чтобы преобразовать изображение в массив Lab, измените значения, а затем выполните обратное

    Как математически вычитать элементы в двух списках на Python и выводить только те элементы, которые соответствуют условию?

    Не удается запустить Internet Explorer через привязки python Selenium WebDriver

    Добавление атрибутов сеанса в Python для навыков Alexa

    как добавить разделитель тысяч в число, которое было преобразовано в строку в python?

    Python - лучший язык программирования в мире.