Numpy
# 一、数据类型及数组创建
# 1、变量
- numpy.nan表示空值
- numpy.Inf表示无穷大
- numpy.pi表示圆周率
- numpy.e表示自然常数
# 2、时间日期和时间增量
import numpy as np
a = np.datetime64('2020-03-01')
print(a, a.dtype) # 2020-03-01 datetime64[D]
# 3、数组创建
通过array()函数进行创建
import numpy as np
# 创建一维数组
a = np.array([0, 1, 2, 3, 4])
b = np.array((0, 1, 2, 3, 4))
print(a, type(a))
# [0 1 2 3 4] <class 'numpy.ndarray'>
通过asarray()函数进行创建
array()
和asarray()
都可以将结构数据转化为 ndarray,但是array()
和asarray()
主要区别就是当数据源是ndarray 时,array()
仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 asarray()
不会。
import numpy as np
x = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
print(z,type(z))
# [[1 1 1]
# [1 1 1]
# [1 1 1]] <class 'numpy.ndarray'>
# 4、零数组
zeros()
函数:返回给定形状和类型的零数组。zeros_like()
函数:返回与给定数组形状和类型相同的零数组。
import numpy as np
x = np.zeros(5)
print(x) # [0. 0. 0. 0. 0.]
x = np.zeros([2, 3])
print(x)
# [[0. 0. 0.]
# [0. 0. 0.]]
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.zeros_like(x)
print(y)
# [[0 0 0]
# [0 0 0]]
# 5、1数组
ones()
函数:返回给定形状和类型的1数组。ones_like()
函数:返回与给定数组形状和类型相同的1数组。
# 6、空数组
empty()
函数:返回一个空数组,数组元素为随机数。empty_like
函数:返回与给定数组具有相同形状和类型的新数组。
# 7、单位数组
eye()
函数:返回一个对角线上为1,其它地方为零的单位数组。identity()
函数:返回一个方的单位数组。
import numpy as np
x = np.eye(4)
print(x)
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
x = np.eye(2, 3)
print(x)
# [[1. 0. 0.]
# [0. 1. 0.]]
x = np.identity(4)
print(x)
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
# 8、对角数组
diag()
函数:提取对角线或构造对角数组。
import numpy as np
x = np.arange(9).reshape((3, 3))
print(x)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(np.diag(x)) # [0 4 8]
print(np.diag(x, k=1)) # [1 5]
print(np.diag(x, k=-1)) # [3 7]
# 9、利用数值范围来创建ndarray
arange()
函数:返回给定间隔内的均匀间隔的值。linspace()
函数:返回指定间隔内的等间隔数字。logspace()
函数:返回数以对数刻度均匀分布。numpy.random.rand()
返回一个由[0,1)内的随机数组成的数组。
import numpy as np
x = np.arange(5)
print(x) # [0 1 2 3 4]
x = np.arange(3, 7, 2)
print(x) # [3 5]
x = np.linspace(start=0, stop=2, num=9)
print(x)
# [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
x = np.logspace(0, 1, 5)
print(np.around(x, 2))
# [ 1. 1.78 3.16 5.62 10. ]
# 二、索引
数组索引机制指的是用方括号([])加序号的形式引用单个数组元素,它的用处很多,比如抽取元素,选取数组的几个元素,甚至为其赋一个新值。
# 1、整数索引
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(x[2]) # 3
x = np.array([[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]])
print(x[2]) # [21 22 23 24 25]
print(x[2][1]) # 22
print(x[2, 1]) # 22
# 2、切片索引
切片操作是指抽取数组的一部分元素生成新数组。对 python 列表进行切片操作得到的数组是原数组的副本,而对 Numpy 数据进行切片操作得到的数组则是指向相同缓冲区的视图
一维数组切片
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(x[0:2]) # [1 2]
#用下标0~5,以2为步长选取数组
print(x[1:5:2]) # [2 4]
print(x[2:]) # [3 4 5 6 7 8]
print(x[:2]) # [1 2]
print(x[-2:]) # [7 8]
print(x[:-2]) # [1 2 3 4 5 6]
print(x[:]) # [1 2 3 4 5 6 7 8]
#利用负数下标翻转数组
print(x[::-1]) # [8 7 6 5 4 3 2 1]
二维数组切片
import numpy as np
x = np.array([[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]])
print(x[0:2])
# [[11 12 13 14 15]
# [16 17 18 19 20]]
print(x[1:5:2])
# [[16 17 18 19 20]
# [26 27 28 29 30]]
print(x[2:])
# [[21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]
# 三、数组操作
# 1、更改形状
numpy.ndarray.shape
表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim
属性(秩)。
import numpy as np
x = np.array([1, 2, 9, 4, 5, 6, 7, 8])
print(x.shape) # (8,)
x.shape = [2, 4]
print(x)
# [[1 2 9 4]
# [5 6 7 8]]
# 2、数组转置
numpy.transpose(a, axes=None)
Permute the dimensions of an array.
numpy.ndarray.T
Same as self.transpose()
, except that self is returned if self.ndim < 2
.
import numpy as np
x = np.random.rand(5, 5) * 10
x = np.around(x, 2)
print(x)
# [[6.74 8.46 6.74 5.45 1.25]
# [3.54 3.49 8.62 1.94 9.92]
# [5.03 7.22 1.6 8.7 0.43]
# [7.5 7.31 5.69 9.67 7.65]
# [1.8 9.52 2.78 5.87 4.14]]
y = x.T
print(y)
# [[6.74 3.54 5.03 7.5 1.8 ]
# [8.46 3.49 7.22 7.31 9.52]
# [6.74 8.62 1.6 5.69 2.78]
# [5.45 1.94 8.7 9.67 5.87]
# [1.25 9.92 0.43 7.65 4.14]]
y = np.transpose(x)
print(y)
# [[6.74 3.54 5.03 7.5 1.8 ]
# [8.46 3.49 7.22 7.31 9.52]
# [6.74 8.62 1.6 5.69 2.78]
# [5.45 1.94 8.7 9.67 5.87]
# [1.25 9.92 0.43 7.65 4.14]]
# 3、数组组合
如果要将两份数据组合到一起,就需要拼接操作
numpy.concatenate((a1, a2, ...), axis=0, out=None)
Join a sequence of arrays along an existing axis.
import numpy as np
x = np.array([1, 2, 3])
y = np.array([7, 8, 9])
z = np.concatenate([x, y])
print(z)
# [1 2 3 7 8 9]
z = np.concatenate([x, y], axis=0)
print(z)
# [1 2 3 7 8 9]
# 4、数组拆分
numpy.split(ary, indices_or_sections, axis=0)
Split an array into multiple sub-arrays as views into ary.
import numpy as np
x = np.array([[11, 12, 13, 14],
[16, 17, 18, 19],
[21, 22, 23, 24]])
y = np.split(x, [1, 3])
print(y)
# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],
# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]