Я пытаюсь манипулировать значениями N-мерного массива на основе решения пользователя, при котором индекс должен быть изменен. Этот пример работает отлично:Переходящий список как срез для N-мерного массива numpy
import numpy as np
a = np.arange(24).reshape(2,3,4)
toChange = ['0', '0', '0'] #input from user via raw_input
a[toChange] = 0
Но если я хочу, чтобы изменить не только одну позицию, но полный ряд, я бегу в проблемы:
toChange = ['0', '0', ':'] #input from user via raw_input
a[toChange] = 0
Это вызывает ValueError: setting an array element with a sequence
. Я вижу, что проблема состоит в строке ':', потому что a[0, 0, :] = 0
делает именно то, что я хочу. Вопрос в том, как передать строку в массив?
Или есть более умный способ манипулирования пользовательскими срезами?
PS: а я работаю на Debian я старого стабильного использовать Python 2.6.6 и Numpy 1.4.1
Благодарим за быстрый ответ! Это хорошо работает в интерактивном режиме, но каким-то образом в моем скрипте я получаю новую ошибку: 'toChange = [0, 0, slice (None, None, None)] TypeError: объект 'numpy.ndarray' не может быть вызван' Is есть ли вероятность, что 'toChange' считается массивом? – Gnihilo
Использование кортежа для ND-индексов является предпочтительным. Использование List/Sequence зависит от шаткой логики, и я лично предпочел бы просто запретить это. – seberg
У меня проблема: нарезка не работала, потому что перед манипуляцией массивом я писал весь массив в файл, используя 'с открытым (« out/histData.txt »,« w ») в качестве dataFile: для фрагмента в histData: np.savetxt (dataFile, slice, fmt = "%. 2f", delimiter = "\ t") ' Поэтому' slice' был ndarray, и все это не сработало. Любительский час :-) @seberg: как бы выглядело это решение? – Gnihilo