什么是NumPy
NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包.
是Python数据分析中使用最多的第三方库, 也是其他高级工具的建构基础.
为什么用NumPy?
更高效
Python中虽然隐去了指针的概念, 但Python中的数据类型都是内置对象类型.所以在使用Python的列表list存储数据时, 实际上list中存储的是对象指针. 在当处理大批量数据时, 这样的数据结构是很浪费空间的.
更快速
NumPy的数组存储在一个连续的内存块中, 而不是像list那样分散存储, 使用NumPy时可以节约计算资源.
NumPy中的数据结构
ndarray
ndarray是一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. ndarray是一个同构数据多维容器, 其中的所有元素必须是相同类型的.
ndarray数组的两个概念:
shape: 表示各维度大小的元组
dtype: 说明数组数据类型的对象
创建数组:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3, 4], [ 5, 6,7, 8], [9, 10, 11, 12]])
b[1,1]=10
print(a.shape)
print(b.shape)
print(a.dtype)
print(b)
运行结果:
(3,)
(3, 4)
int32
[[ 1 2 3 4]
[ 5 10 7 8]
[ 9 10 11 12]]
ndarray数组的下标是从0开始的, shape分别表示了各维度的元素个数.
通过指定元素类型dtype来创建结构数组:
persontype = np.dtype({
'names':['name', 'age', 'chinese', 'math', 'english'],
'formats':['S32', 'i', 'i', 'i', 'f']
})
peoples = np.array([
('ZhangFei', 32, 75, 100, 90),
('GuanYu', 24, 85, 96, 88.5),
('ZhaoYun', 28, 85, 92, 96.5),
('HuangZhong', 29, 65, 85, 100)],
dtype = persontype)
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
#输出各平均值
print(np.mean(ages))
print(np.mean(chineses))
print(np.mean(maths))
print(np.mean(englishs))
运行结果:
28.25
77.5
93.25
93.75
除了np.array
之外, 还有一些函数也可以新建数组.
如, zeros
和ones
分别可以创建指定长度或形状的全0或全1数组.
empty
可以创建一个没有任何具体值的数组.
传入参数为元组类型, 代表数组的 shape.
zero = np.zeros((2, 3))
one = np.ones((3, 4))
empty = np.empty(5)
print(zero)
print(one)
print(empty)
运行结果:
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[1.00000000e+002 9.60000000e+001 9.20000000e+001 8.50000000e+001
1.03376103e-259]
注意, empty
函数返回的不是全0数组, 而是一些未初始化的垃圾值.
创建等差数组
ndarray中有两个函数能迅速创建等差数组
arange
, 参数分别是: 初始值,终值,步长
linspace
, 参数分别是: 初始值,终值,元素个数
x1 = np.arange(1, 11, 2)
x2 = np.linspace(1, 9, 5)
运行结果:
[1 3 5 7 9]
[1. 3. 5. 7. 9.]