TypeError: несоответствие между массивом dtype (' - PullRequest
1 голос
/ 26 мая 2020

Я использую np.savetxt впервые и пытаюсь сохранить две переменные (строку и число с плавающей запятой) в файле с именем «trial.csv» следующим образом:

import numpy as np

RT = 2.76197329736740
key_name = 'space'

print(RT,key_name)
# Save data in a CSV file named subj_data_file
np.savetxt("trial.csv", (RT,key_name), delimiter=',', header="RTs,Key_Name")

Я получил следующую ошибку:

TypeError: Mismatch between array dtype ('<U32') and format specifier ('%.18e')

Я не понимаю значения обоих ('<U32') и ('%.18e'). На самом деле я не понимаю, как использовать fmt, когда у меня есть числа с плавающей запятой, целые числа и строки ...

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

Ответы [ 2 ]

1 голос
/ 26 мая 2020
import numpy as np

names  = np.array(['NAME_1', 'NAME_2', 'NAME_3'])
floats = np.array([ 0.1234 ,  0.5678 ,  0.9123 ])

ab = np.zeros(names.size, dtype=[('key_name', 'U6'), ('RT', float)])
ab['key_name'] = names
ab['RT'] = floats

np.savetxt('trial.csv', ab, fmt="%10s , %10.3f", header="Keys_Names,RTs")
1 голос
/ 26 мая 2020

Это происходит потому, что аргумент fmt в np.savetxt() по умолчанию - '%.18e', который подходит для чисел (целые числа / числа с плавающей запятой). Если вы также хотите сохранить строки, вам нужно изменить аргумент fmt на '%s'.

Кроме того, вам нужно изменить форму X, чтобы отразить тот факт, что это одна строка с две колонки. Итак, вам нужно изменить np.savetxt, чтобы он выглядел так:

np.savetxt("trial.csv", [[RT, key_name]], fmt="%s", delimiter=',', header="RTs,Key_Name")

Это означает, что все будет сохранено в виде строки. Итак, значение 2.761.. не будет плавающим. Вы можете загрузить этот файл так:

np.loadtxt("trial.csv",delimiter=',', dtype=str) #notice assiging dtype to str
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...