Featured image of post NumPy

NumPy

数据类型

数组 numpy.array

np.zeros

创建指定大小的数组,数组元素以 0 填充。

  • numpy.zeros(shape, dtype=None, order = ‘C’)
  • shape 数组形状
  • dtype 数据类型
  • order ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
np.zero(5)
# [0. 0. 0. 0. 0.]

np.zero(5, dtype=int)
# [0 0 0 0 0]

np.zero((3, 5))       # 三行五列
np.zero(shape=(3, 5))
# [
#   [0., 0., 0., 0., 0.],
#   [0., 0., 0., 0., 0.],
#   [0., 0., 0., 0., 0.],
# ]

np.ones

创建指定大小的数组,数组元素以 1 填充。

  • numpy.ones(shape, dtype=None, order=‘C’)

np.full

创建指定大小和数据的数组

  • numpy.full(shape, fill_value, dtype=None, order=‘C’)
1
2
# 创建一个 三行五列 值为 666.0 的矩阵
np.full((3, 5), 666.0)

np.arange

在数组中,可以使用 range 创建指定范围的数组(不能传递浮点数)。

1
2
3
4
# [0, 20)  步长为 2
[i for i in range(0, 20, 2)]

# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

在 numpy 中,可以使用 arange 创建数组范围并返回 ndarray 对象。

  • numpy.arange(start, stop, step, dtype)
  • start 起始值,默认为 0
  • stop 终止值,不包含
  • step 步长,默认为 1
  • dtype 数据类型
1
2
3
4
5
np.arange(0, 20, 2)

# 可以传递浮点数
np.arange(0, 1, 0.2)
# [0., 0.2, 0.4, 0.6, 0.8]

np.linspace

创建一个一维数组,构成一个等差数列。

  • numpy.linspace(start, stop, num=50, endpoint=True, retstep=False,dtype=None, axis=0)
  • start 起始值
  • stop 终止值(默认包含 endpoint=True)
  • endpoint 当为 True 时,会包含 stop 的值
  • retstep 当为 True 时,生成的数组中会显示间距
  • dtype 数据类型
1
2
3
# 生成 [0, 20] 间距为 2 的 10 个数
np.linspace(0, 20, 11)
# [0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.]

np.random

  • numpy.random.randint(low, high=None, size=None, dtype=None)

生成指定的整数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 在 [0, 10) 间生成一个随机数
np.random.randint(0, 10)

# 在 [0, 10) 间生成一个大小为 10 的一维数组
np.random.randint(0, 10, size=10)
# [7, 7, 7, 7, 7, 4, 5, 6, 4, 7]

# 在 [0, 10) 间生成一个 3行6列 的矩阵
np.random.randint(0, 10, size=(3, 5))


# 指定随机种子,使生成的数据在测试时保持一致
np.random.seed(666)
  • numpy.random.random(size=None)

生成 [0.0, 1.0) 间的浮点数。

  • numpy.random.normal(loc=0.0, scale=1.0, size=None)

生成一个符合正态分布的浮点数。

  • loc 均值
  • scale 方差
  • size 大小
1
2
3
4
5
# 生成 均值为 10 方差为 100 的浮点数
np.random.normal(10, 100)

# 生成 均值为 0 方差为 1 的 3行5列的矩阵
np.random.normal(0, 1, (3, 5))

numpy.array 基本操作

假设有如下一个一维的数组 x 和 一个三行五列的矩阵 X:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import numpy as np
np.random.seed(0)

x = np.arange(10)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

X = np.arange(15).reshape(3, 5)
# [
#   [ 0,  1,  2,  3,  4],
#   [ 5,  6,  7,  8,  9],
#   [10, 11, 12, 13, 14]
# ]

Reshape

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 将 x 转置为 2行5列的 矩阵
A = x.reshape(2, 5)
# [
#   [0, 1, 2, 3, 4],
#   [5, 6, 7, 8, 9]
# ] 

# 将向量装置成矩阵
B = x.reshape(1, 10)
# [
#   [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# ]

# -1:让 numpy 自己决定维度
# 10列
C = x.reshape(-1, 10)
# [
#   [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# ]

# 10行
D = x.reshape(10, -1)
# [
#   [0],
#   [1],
#   [2],
#   [3],
#   [4],
#   [5],
#   [6],
#   [7],
#   [8],
#   [9],
# ]

# 2行
E = x.reshape(2, -1)
# [
#   [0, 1, 2, 3, 4],
#   [5, 6, 7, 8, 9]
# ]

# 数据不能整除的情况下,不能 reshape
F = x.reshape(3, -1)

基本属性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# ndarray.ndim    秩,即轴的数量或维度的数量
x.ndim
# 1
X.ndim
# 2

# ndarray.shape   数组维度,对于矩阵为n行m列
x.shape
# (10, )
X.shape
# (3, 5)

# ndarray.size    数组元素的总个数,对于矩阵为 n*m 个
x.size
# 10
X.size
# 15

数据访问

一维 numpy.array 可以和数组一样进行访问。

多维 numpy.array 在访问时,推荐传入多个参数。

1
2
3
# 一维
x[0]
# 0
Licensed under CC BY-NC-SA 4.0