NumPy 是python中一个用于科学计算的第三方库,其强大的功能使其在机器学习中被广泛使用

ndarray对象

ndarray是一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。

ndarray有一些限制:

  • 数组中元素的数据类型必须一致
  • 数组必须是严格的”矩形”,即每一行、每一列或更高维度下的元素数量必须相等
  • 一旦创建,数组的大小不能改变

ndarray的创建方法

主要有np.array()和np.asarray()两种方式创建一个ndarray对象

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr1)

# [[1 2 3]
# [4 5 6]
# [7 8 9]]

# asarray方法中传入的本身就是ndarray对象时不会进行拷贝
arr2 = np.asarray(arr1)
print(id(arr1) == id(arr2)) # True

ndarray的属性

ndarray 包含以下属性:

1
2
3
4
5
6
7
8
9
import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

arr.ndim # 维度 2
arr.dtype # 元素数据类型 int64
arr.shape # 形状 (3,3)
arr.size # 元素个数 9
arr.itemsize # 每个元素的字节大小 8

其他创建方式

np.zeros()np.ones()np.full()np.empty()分别用于创建一个指定形状下全为0全为1全为指定数未初始化的数组

1
2
3
4
5
6
import numpy as np

np.zeros((3,4),dtype='int64')
np.ones((3,4))
np.full((3,4),5)
np.empty((3,4))

上述方法都有对应的_like方法,可用于创建与指定数组具有相同形状(ndarray.shape)的新数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np

arr1 = array([[1,2,3],[4,5,6],[7,8,9]])

np.zeros_like(arr1)

# [[0 0 0]
# [0 0 0]
# [0 0 0]]

np.full_like(arr1,5)

# [[5 5 5]
# [5 5 5]
# [5 5 5]]

np.arange()方法返回给定范围内间隔均匀的一维数组,用法与range()方法相似:

1
2
3
import numpy as np

arr = np.arange(2,10,3) #[2 5 8]

np.linspace()和np.logspace()方法分别返回给定范围内的等差数列和等比数列,endpoint参数指定stop是否被包含在数列中,默认值为True:

1
2
3
4
5
6
7
8
9
import numpy as np

arr1 = np.linspace(1,11,4)
print(arr1)
# [ 1. 4.33333333 7.66666667 11. ]

arr2 = np.logspace(2,7,5,endpoint=False,base=3)
print(arr2)
# [ 9. 27. 81. 243. 729.]

创建随机数组

np.random.rand()方法返回给定形状的随机数组,元素值在[0,1)区间

np.random.randint()方法返回给定形状的随机整数组,可指定随机数的上下区间

np.random.uniform()方法返回给定形状的随机浮点数组,可指定随机数的上下区间

random.randn()方法返回给定形状的随机数组,用标准正态分布(均值为0,标准差为1)的随机样本填充

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
import numpy as np

arr1 = np.random.rand(2,3,5)
print(arr1)
# [[[0.0625163 0.73693026 0.53203818 0.27268481 0.40413664]
# [0.18778361 0.69763782 0.10352873 0.55233715 0.13124492]
# [0.18227759 0.50357063 0.01573057 0.02669679 0.92470894]]
#
# [[0.73249089 0.5284346 0.92299438 0.0163727 0.53765536]
# [0.75351635 0.9618822 0.72242189 0.64231682 0.62557239]
# [0.84953444 0.22921768 0.50432664 0.92761247 0.09878597]]]

arr2 = np.random.randint(1,11,(2,3))
print(arr2)
# [[10 2 1]
# [ 7 4 5]]

arr3 = np.random.uniform(2.71,3.14,(3,5))
print(arr3)
# [[2.87451826 2.90415013 2.77014285 3.08934428 3.06191658]
# [3.04050832 3.11024265 3.06668436 2.97682878 2.81714609]
# [2.82864933 2.82680555 2.99985549 2.9641405 2.92780392]]

arr4 = np.random.randn(4,2)
print(arr4)
# [[-1.69780275 -1.31901377]
# [-2.06724082 0.06812327]
# [-1.54824504 -1.24796352]
# [ 0.56579989 2.02163774]]