сообщение об ошибке при заполнении ячейки в массиве 2d numpy - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь заполнить данные из некоторых файлов CSV в массив Numpy с помощью следующего кода:

PreExArray=zeros([len(TestIDs),numColumns],float)

for row in reader:
    if row[1] =='PreEx10SecondsBEFORE':
        PreExArray[(j-1),0]=[row[2]]

Однако последняя строка кода выше выдает следующую ошибку:

ValueError: setting an array element with a sequence.

Итак, я распечатал содержимое строки [2] следующим образом:

print 'row[2] is:  ',row[2]

Это произвело:

Строка [2]: 0,780083333333

Итак,содержимое строки [2] не является последовательностью, как указывает сообщение об ошибке.Вместо этого содержимое является числом.

Поэтому я использовал следующий код, чтобы поместить содержимое строки [2] в переменную, а затем заполнить PreExArray [(j-1), 0] содержимымэтой переменной, а затем распечатайте содержимое этой переменной:

jones = row[2]
PreExArray[(j-1),0]=jones
print 'PreExArray[(j-1),0] is:  ',PreExArray[(j-1),0]

Результат:

PreExArray [(j-1), 0]: 0,780083333333

Таким образом, помещение строки [2] в переменную решает проблему.Но это действительно неаккуратный код, если мне приходится каждый раз помещать его в переменную.

Может кто-нибудь показать мне, как исправить код, чтобы он не выдавал ошибку, когда я набираю что-то намного проще, напримерPreExArray [(j-1), 0] = [row [2]]?

==========================================================================================

ОК.Я переписал код, и теперь он выдает новую ошибку.Новый код выглядит следующим образом:

PreExArray=zeros([len(TestIDs),numColumns],float) 

for row in reader: 
    if row[1] =='PreEx10SecondsBEFORE': 
        PreExArray[(j-1),0]=row[1]
        PreExArray[(j-1),1]=row[2]

Этот исправленный код теперь выдает следующее сообщение об ошибке:

PreExArray[(j-1),0]=row[1]
ValueError: setting an array element with a sequence.

Однако, когда я закомментирую PreExArray [(j-1), 0] = строка [1] следующим образом (#PreExArray [(j-1), 0] = строка [1]), последующие строки выполняются без выдачи ошибки.

Может кто-нибудь сказать мне, как редактировать эточтобы он не продолжал выкидывать эту ошибку?

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Вы должны просто иметь:

PreExArray[(j-1),0]=row[2]

То есть правая сторона НЕ должна быть помещена в список длины 1.

0 голосов
/ 11 октября 2010

Похоже, что ваши строковые переменные взяты из электронной таблицы, а первыми значениями индекса являются метки строк (строки). Как уже указывалось, вы не можете хранить эти данные в массивном массиве типа данных «float».

Сообщение об ошибке, которое вы получаете, связано с тем фактом, что строка, к которой он обращается, выглядит как последовательность (вероятно, потому, что она поддерживает атрибут len .)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...