【问题标题】:Numpy saves Integer Array as Float ArrayNumpy 将整数数组保存为浮点数组
【发布时间】:2020-01-04 07:28:49
【问题描述】:

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

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.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00

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

【问题讨论】:

  • 默认保存格式为:fmt='%.18e'savetxt 文档讨论了替代的 fmt 值。
  • 您可以使用fmtsavetxt 控制保存数组的格式,然后您还可以在回读时在loadtxt 期间指定dtype
  • float 也是loadtxt 的默认数据类型。
  • @prune,我正在删除重复项。该 SO 是关于在 np.empty 数组中分配元素。这是关于将值写入csv

标签: python numpy


【解决方案1】:

使用%i(整数格式)的fmt输入到np.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 来获取分隔符)。

【讨论】:

    【解决方案2】:

    如果您没有任何限制您使用 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=",")
    

    我个人不喜欢标准泡菜

    【讨论】:

    • 我不需要使用 np,但我需要它是一个 .txt 文件
    • @Jonas 还添加了 csv 选项。
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多