1

我的整数数组被保存为浮点数组。

array = [1, 2, 3, 4, 5, 6, 7];
print(array)
>> [1, 2, 3, 4, 5, 6, 7]

np.savetxt('labels.txt', array, delimiter=",");

test = np.loadtxt("labels.txt", delimiter=",")
print(test)
>> [1. 2. 3. 4. 5. 6. 7.]

我创建的labels.txt样子是这样的:

1.0000000000000000EE+00 2.00000000000000000000E+00 3.000000000000000000E+00 4.0000000000000000000000 E+00 5.00000000000000000000 E+00 6.00000000000000000000E+00.00000000E+00 7.000000000000000000000000E+0000000000000000E+0000000000 E+00000000E+00000000E

但我希望文本是1, 2, 3, 4, 5, 6, 7. 我怎样才能做到这一点?

4

2 回答 2

1

如果您没有任何限制您使用 np.savetext 的内容,请尝试使用 pickle:

import numpy as np
import pickle as pkl

path = r"path/to/dump.pkl"
a = np.array([1,2,3,4,5,6,7])
b = pkl.dump(a, path)
c = pkl.load(path)
np.testing.assertequal(c, a)

或者在控制台中,如果您更喜欢它,

>>> import numpy as np
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> b = np.array(a)
>>> b
array([1, 2, 3, 4, 5, 6, 7])
>>> import pickle
>>> pickle.dumps(b)
b'\x80\x03cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02C\x01bq\x03\x87q\x04Rq\x05(K\x01K\x07\x85q\x06cnumpy\ndtype\nq\x07X\x02\x00\x00\x00i4q\x08K\x00K\x01\x87q\tRq\n(K\x03X\x01\x00\x00\x00<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89C\x1c\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00q\rtq\x0eb.'
>>> p = pickle.dumps(b)
>>> d = pickle.loads(p)
>>> d
array([1, 2, 3, 4, 5, 6, 7])

这不是人类可读的文件,但它可以满足您的要求。


要不就

with open(path, 'wb') as f:
    np.savetxt(f, a, fmt='%i', delimiter=",")

我个人不喜欢标准泡菜

于 2020-01-03T20:58:51.660 回答
1

使用(整数格式)的fmt输入%inp.savetxt

import numpy as np

testList = [1, 2, 3, 4, 5]
np.savetxt("testList.txt", [testList], fmt="%i", delimiter=",", newline="\n")

这给出了输出1,2,3,4,5。请注意,输入savetxt是一个列表列表。那是因为分隔符分隔列值而换行符分隔行(因此您需要 2D 来获取分隔符)。

于 2020-01-03T21:07:50.627 回答