Numpy语法总结

最近更新: 2020-9-10

第一章.数据IO

NumPy提供了多种存取数组内容的文件操作函数。保存数组数据的文件可以是二进制格式或者文本格式。二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型

一,tofile()和fromfile()

    • tofile()将数组中的数据以二进制格式写进文件
    • tofile()输出的数据不保存数组形状和元素类型等信息
    • fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改

image

从上面的例子可以看出,在读入数据时:需要正确设置dtype参数,并修改数组的shape属性才能得到和原始数据一致的结果。无论数据的排列顺序是C语言格式还是Fortran语言格式,tofile()都统一使用C语言格式输出。此外如果指定了sep参数,则fromfile()和tofile()将以文本格式对数组进行输入输出。sep参数指定的是文本数据中数值的分隔符。

二.save()和load()

save()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from tempfile import TemporaryFile
outfile = TemporaryFile()

x = np.arange(10)
np.save(outfile, x)

_ = outfile.seek(0) # Only needed here to simulate closing & reopening file
np.load(outfile)
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
with open('test.npy', 'wb') as f:
np.save(f, np.array([1, 2]))
np.save(f, np.array([1, 3]))
with open('test.npy', 'rb') as f:
a = np.load(f)
b = np.load(f)
print(a, b)
# [1 2] [1 3]
  1. 如果想将多个数组保存到一个文件中,可以使用savez()
  2. savez()的第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起名
  3. 非关键字参数传递的数组会自动起名为arr_0、arr_1、…。
  4. savez()输出的是一个扩展名为npz的压缩文件,其中每个文件都是一个save()保存的npy文件,文件名和数组名相同
  5. load()自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为键获取数组的内容

image

image

1
2


第二章数据类型

固定长度的整型,包括有符号整型或无符号整型。

1.整型

整型范围

  • Int8 - [-128 : 127]
  • Int16 - [-32768 : 32767]
  • Int32 - [-2147483648 : 2147483647]
  • Int64 - [-9223372036854775808 : 9223372036854775807]

无符号整型范围

  • UInt8 - [0 : 255]
  • UInt16 - [0 : 65535]
  • UInt32 - [0 : 4294967295]
  • UInt64 - [0 : 18446744073709551615]

2.浮点数据类型

single数据类型

存储有符号的 IEEE 格式 32 位(4 个字节)单精度浮点数,负数取值范围为 -3.4028235E+38~-1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。单精度数值存储实数数值的近似值。

3.nan值数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> import numpy as np
>>> l=np.array([[1,2],[2,3],[np.nan,3]])
>>> l
array([[ 1., 2.],
[ 2., 3.],
[nan, 3.]])
>>> l.mean()
nan
>>> l[np.isnan(l)]=0
>>> l
array([[1., 2.],
[2., 3.],
[0., 3.]])

第三章数组形状

1改变数组形状

1.1将数组变为具体的形状

reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变。是对每行元素进行处理
resize(shape) : 与.reshape()功能一致,但修改原数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
In [1]: a = np.arange(20)
#原数组不变
In [2]: a.reshape([4,5])
Out[2]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

In [3]: a
Out[3]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])

#修改原数组
In [4]: a.resize([4,5])

In [5]: a
Out[5]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

.swapaxes(ax1,ax2) : 将数组n个维度中两个维度进行调换,不改变原数组

1
2
3
4
5
6
7
In [6]: a.swapaxes(1,0)
Out[6]:
array([[ 0,  5, 10, 15],
       [ 1,  6, 11, 16],
       [ 2,  7, 12, 17],
       [ 3,  8, 13, 18],
       [ 4,  9, 14, 19]])

1.2将多维数组转为一维数组

ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维

另外,reshape(-1)也可以“拉平”多维数组

这里写图片描述

img

$$ —- \mathcal{End} —- $$

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×