python将数组保存至文件_python – 将numpy数组保存到文件(尽可能小的大小)

由于你有很多零,你只能写出表格中的非零元素(索引,数字).

假设您有一个包含少量非零数字的数组:

In [5]: a = np.zeros((10, 10))

In [6]: a

Out[6]:

array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

In [7]: a[3,1] = 2.0

In [8]: a[7,4] = 17.0

In [9]: a[9,0] = 1.5

首先,隔离有趣的数字及其指数:

In [11]: x, y = a.nonzero()

In [12]: zip(x,y)

Out[12]: [(3, 1), (7, 4), (9, 0)]

In [13]: nonzero = zip(x,y)

现在您只剩下少量数据元素.最简单的方法是将它们写入文本文件:

In [17]: with open('numbers.txt', 'w+') as outf:

....: for r, k in nonzero:

....: outf.write('{:d} {:d} {:g}\n'.format(r, k, a[r,k]))

....:

In [18]: cat numbers.txt

3 1 2

7 4 17

9 0 1.5

这也让您有机会了解数据.在C程序中,您可以使用fscanf读取此数据.

但是你可以使用struct编写二进制数据来进一步减小尺寸:

In [17]: import struct

In [19]: c = struct.Struct('=IId')

In [20]: with open('numbers.bin', 'w+') as outf:

....: for r, k in nonzero:

....: outf.write(c.pack(r, k, a[r,k]))

Struct构造函数的参数意味着;使用原生日期格式’=’.第一个和第二个数据元素是无符号整数“I”,第三个元素是双“d”.

在您的C程序中,这些数据可能最好作为二进制数据读入打包结构.

编辑:为2D阵列更新了答案.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值