Как вставить значения с плавающей точкой из CSV-файла в XYZ-расположениях в массиве numpy - PullRequest
1 голос
/ 25 апреля 2019

Мне нужно вставить значение (Float) в XYZ (int) из файла CSV в world = numpy.zeros((360,360,360))

Пример строк в CSV-файле:

Value   X   Y   Z
4.5396  159 159 1
4.5905  182 160 3
etc

У меня есть около 16000 строк в файле CSV, хотя многие являются дубликатами.

Моя основная проблема заключается в том, что мне нужно использовать целые числа (XYZ) для вставки Float (Value) в Numpy, где он отказывается обрабатывать одновременно, и я также пытался с Pandas, но та же проблема.

Здесь я преобразовал все это в целые числа, и это единственный способ сделать его работоспособным.

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',',skip_header=1) 
for Value,X, Y, Z in data.astype(int):
         world[X, Y, Z] = Value

Это должно выглядеть так

world[159,159,1] = 4.5369
world[182,160,3] = 4.5945 

но я могу получить только это

world[159,159,1] = 4
world[182,160,3] = 4

все остальное приводит к различным ошибкам

1 Ответ

0 голосов
/ 25 апреля 2019

Сделайте это вместо:

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',', skip_header=1) 
X, Y, Z = data[:, 1:].astype(int).T
world[X, Y, Z] = data[:, 0]

Или для чтения текстовых данных напрямую с правильным типом:

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',', skip_header=1,
                        dtype=[('Value', float), ('X', int), ('Y', int), ('Z', int)]) 
world[data['X'], data['Y'], data['Z']] = data['Value']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...