Как сохранить два numpy массива с оригинальным dtype / точности - PullRequest
1 голос
/ 28 марта 2020

У меня есть два numpy массива: один float , другой uint64 . Когда я складываю их с np.c_ , np.hstack или np.concentrate , значения массива uint64 изменяются. Как правильно их сложить и записать в текстовый файл?

import numpy as np
a= np.array([11112222333344445555,11112222333344445556])
b = np.array([1.0,2.0])
c = np.c_[a,b]
np.savetxt('test',c,fmt="%22i %12.6f")

Числа, сохраненные в тестовом файле:

11112222333344446464     1.000000
11112222333344446464     2.000000

Конечно, я могу сохранить их с помощью al oop. Но мне интересно, есть еще способ pythoni c.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Я думаю, что это лучшее решение

import numpy as np
a= np.array([11112222333344445555,11112222333344445556])
b = np.array([1.0,2.0])
c = np.c_[a.astype('S32'),b]
np.savetxt('test',np.char.decode(c),fmt="%s")

Результат

11112222333344445555 1.0
11112222333344445556 2.0
0 голосов
/ 28 марта 2020

Попробуйте это:

strfmta = np.vectorize(lambda x: "%1s" % x)
strfmtb = np.vectorize(lambda x: "%1.6f" % x)

a = np.array([11112222333344445555, 11112222333344445556])
b = np.array([1.0, 2.0])

a = strfmta(a)
b = strfmtb(b)

c = np.c_[a, b]
np.savetxt('test', c, fmt="%22s %12s")

Вывод test файла:

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