045、数组的读写
本文最后更新于 67 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

数组的读写

数组支持方便的读写操作。

数组的读取

import numpy as np

可以用函数np.loadtxt()从文本文件中读取数据。假设有这样的一个文件myfile.txt,内容为:

%%writefile myfile.txt
2.1 2.3 3.2 1.3 3.1
6.1 3.1 4.2 2.3 1.8
Writing myfile.txt
np.loadtxt('myfile.txt')
array([[2.1, 2.3, 3.2, 1.3, 3.1],
       [6.1, 3.1, 4.2, 2.3, 1.8]])

默认文件中的数据是空格分割,如果分割符不是空格,则可以通过参数指定:

%%writefile myfile.txt
2.1, 2.3, 3.2, 1.3, 3.1
6.1, 3.1, 4.2, 2.3, 1.8
Overwriting myfile.txt
np.loadtxt('myfile.txt', delimiter=',')
array([[2.1, 2.3, 3.2, 1.3, 3.1],
       [6.1, 3.1, 4.2, 2.3, 1.8]])

数组的二进制读写

直接读写文本方式不如使用二进制读写速度快效率高。可以将数组存储成二进制格式,并进行读取。

用于保存数组的函数有:

  • np.save(file_name, arr):保存单个数组,.npy格式。
  • np.savez(file_name, *args, **kwds):保存多个数组,无压缩的.npz格式。
    用于读取数组的函数为:
  • np.load(file_name):对于.npy文件,返回保存的数组;对于.npz文件,返回一个名称-数组对组成的字典。

考虑以下两个数组:

a = np.ones((2, 3))
b = np.zeros(3)

单个数组可以用np.save()保存,并用np.load()函数读取,读取后,返回一个数组:

np.save("data", a)
np.load("data.npy")
array([[1., 1., 1.],
       [1., 1., 1.]])

多个数组可以用np.savez()np.load()函数读写。np.savez()函数支持两种模式保存多个数组,第一种是*arg模式:

np.savez("dataall", a, b)
data = np.load("dataall.npz")
data

np.load()函数读取保存的多个数组时,函数会返回一个字典。在*arg模式下,这些数组对应的键会被自动命名为arr_数字的形式,其中的数字按照保存的顺序,从0开始,因此,用键arr_0索引得到的数组是a,arr_1索引得到的数组是b:

for k in data:
    print(k, data[k])
arr_0 [[1. 1. 1.]
 [1. 1. 1.]]
arr_1 [0. 0. 0.]

第二种是**kwds模式:

np.savez("dataall", x=a, y=b)
data = np.load("dataall.npz")

此时索引的字典是保存时传入的参数:

for k in data:
    print(k, data[k])
x [[1. 1. 1.]
 [1. 1. 1.]]
y [0. 0. 0.]

删除生成的文件:

%rm myfile.txt data.npy dataall.npz
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇