numpy教程07---ndarray的保存与加载

欢迎关注公众号【Python开发实战】,免费领取Python学习电子书!

工具-numpy

numpy是使用Python进行数据科学的基础库。numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。

保存和加载

numpy可以方便地以二进制或文本格式来保存和加载ndarray。

二进制格式 .npy

下面创建一个随机的ndarray,并保存。

a = np.random.rand(2, 3)
a

输出:

array([[0.76953407, 0.79648012, 0.8868019 ],
       [0.88131806, 0.57297333, 0.70059907]])
np.save('my_array', a)

由于文件名不包含扩展名,因此numpy会自动添加扩展名为.npy,下面查看一下文件内容:

with open('my_array.npy', 'rb') as f:
    content  = f.read()
content

输出:

b"\x93NUMPY\x01\x00v\x00{'descr': '<f8', 'fortran_order': False, 'shape': (2, 3), }                                                          \n0L\xbb\xe8\x05\xa0\xe8?\x13s\x00\xdf\xc3|\xe9?\xdd\x05\xf4`\xae`\xec?S\x0e\xad\xee\xc13\xec?\x03\xa6E)\xccU\xe2?\x97\xc6\xdc\xbcNk\xe6?"

想要把该文件加载到numpy数组中只需要调用load函数。

a_loaded = np.load('my_array.npy')
a_loaded

输出:

array([[0.76953407, 0.79648012, 0.8868019 ],
       [0.88131806, 0.57297333, 0.70059907]])

文本格式

现在以文本格式来保存ndarray。

np.savetxt('my_array.csv', a)

现在查看一下文件内容:

with open('my_array.csv', 'rt') as f:
    print(f.read())

输出:

7.695340676822350900e-01 7.964801173689884939e-01 8.868019002549619723e-01
8.813180600777265061e-01 5.729733282179839682e-01 7.005990685194828371e-01

这是以制表符作为分隔符的csv文件,还可以设置不同的分隔符。

np.savetxt('my_array.csv', a, delimiter=',')

再查看一下文件内容

with open('my_array.csv', 'rt') as f:
    print(f.read())

输出:

7.695340676822350900e-01,7.964801173689884939e-01,8.868019002549619723e-01
8.813180600777265061e-01,5.729733282179839682e-01,7.005990685194828371e-01

加载该文件,只需要调用loadtxt函数。

a_loaded = np.loadtxt('my_array.csv', delimiter=',')
a_loaded

输出:

array([[0.76953407, 0.79648012, 0.8868019 ],
       [0.88131806, 0.57297333, 0.70059907]])

压缩格式 .npz

还可以在一个压缩文件中保存多个ndarray。

b = np.arange(24).reshape(2, 3, 4)
b

输出:

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
np.savez('my_arrays', my_a=a, my_b=b)

现在看一下文件内容,文件的扩展名.npz已经自动添加。

with open('my_arrays.npz', 'rb') as f:
    content = f.read()
repr(content)[:180] + '[...]'

输出:

'b"PK\\x03\\x04\\x14\\x00\\x00\\x00\\x00\\x00\\x00\\x00!\\x00&\\xa9j\\xe4\\xb0\\x00\\x00\\x00\\xb0\\x00\\x00\\x00\\x08\\x00\\x00\\x00my_a.npy\\x93NUMPY\\x01\\x00v\\x00{\'descr\': \'<f8\', \'fortran_order\': False, \'s[...]'

然后可以这样加载这个文件。

my_arrays = np.load('my_arrays.npz')
my_arrays

输出:

<numpy.lib.npyio.NpzFile at 0x93b8080>

这是一个类似字典的对象,它会懒加载ndarray。

my_arrays.keys()

输出:

['my_a', 'my_b']
my_arrays['my_a']

输出:

array([[0.76953407, 0.79648012, 0.8868019 ],
       [0.88131806, 0.57297333, 0.70059907]])
my_arrays['my_b']

输出:

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯旋.Lau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值