什么是NumPy?
NumPy是Python中科学计算的基础软件包。
它是一个提供多了维数组对象,多种派生对象(如:掩码数组、矩阵)以及用于快速操作数组的函数及API,它包括数学、逻辑、数组形状变换、排序、选择、I/O 、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等等。
NumPy包的核心是ndarray对象。
梳理来源于numpy中文文档。
https://www.numpy.org.cn/index.htmlwww.numpy.org.cn创建一个数组
一维数组的创建
import numpy as np#引入numpy包
a = np.array([1,2,3,4,5])#列表
b = np.array((0,1,2,3,4))#元祖
c = np.arange(9)
d = np.linspace(0, 2*np.pi, 5)
print(" a=",a,"n","b=",b,"n","c=",c,"n","d=",d)
输出为:
a= [1 2 3 4 5]
b= [0 1 2 3 4]
c= [0 1 2 3 4 5 6 7 8]
d= [0. 1.57079633 3.14159265 4.71238898 6.28318531]
最基本的方法是将序列传递给NumPy的array()函数,可以传递任何序列(类数组),而不仅仅是常见的列表(list)数据类型。
对数组进行索引就像列表或任何其他Python序列一样。
多维数组的创建以及切片
a = np.array([[1,2,3,4,5],[2,3,4,53,3],[36,5,7,5,3],[23,45,64,33,23]])
print("a.shape",a.shape)#输出数组的维度
print("a[0,2]",a[0,2])#输出第一列第三行的元素
print("a[0:2,1:3]","n",a[0:2,1:3])#输出第一第二行和第二第三列的元素
print("a[:,0:2]","n",a[:,0:2])#输出第一第二列的元素
print("a[:,2]",a[:,2])#输出第三列的元素
输出为:
a.shape (4, 5)
a[0,2] 3
a[0:2,1:3]
[[2 3]
[3 4]]
a[:,0:2]
[[ 1 2]
[ 2 3]
[36 5]
[23 45]]
a[:,2] [ 3 4 7 64]
创建一个布尔数组
a = np.full((3, 3), True, dtype=bool)#方法一
b = np.ones((3,3), dtype=bool)#方法二
输出为:
array([[ True, True, True],
[ True, True, True],
[ True, True, True]])
数组属性
a=np.array([[24,533,2,4],[2,34,2,3],[2,543,34,4]])
print(a.shape)
print(a.dtype)#输出a的数据类型
print(type(a))#输出a包含元素的数据类型
print(a.size)#输出a包含元素个数
print(a.ndim)#输出a的维度
输出为:
(3, 4)
int32
<class 'numpy.ndarray'>
12
2
基本操作符
可以使用四则运算符 +、- 、/ 来完成运算操作
a = np.array([1,2,3,4,5])
b = np.array((0,1,2,3,4))
print(a + b)
print(a - b)
print(b / a)
print(a * b)
print(a ** 2)
print(a > b)
print(a%2)#求余数
输出为:
[1 3 5 7 9]
[1 1 1 1 1]
[0. 0.5 0.66666667 0.75 0.8 ]
[ 0 2 6 12 20]
[ 1 4 9 16 25]
[ True True True True True]
[1 0 1 0 1]
数组特殊运算符
a = np.array([1,2,3,4,5])
b = np.array((0,1,2,3,4))
print(a.sum())
print(a.min())
print(a.max())
输出为:
15
1
5
where函数
相当于给出数组的下标
a = np.arange(0, 100, 10)
b = np.where(a < 50)
c = np.where(a >= 50)[0]
print(a)
print(b)
print(c)
输出为:
[ 0 10 20 30 40 50 60 70 80 90]
(array([0, 1, 2, 3, 4], dtype=int64),)
[5 6 7 8 9]
python中的自定义函数
关键词def后面加一个冒号
def hello(name, loud=False):
if loud:
print('HELLO, %s!' % name.upper())
else:
print('Hello, %s' % name)
hello('Bob') #此时loud默认是False
hello('Fred', loud=True)
输出为:
Hello, Bob
HELLO, FRED!
最后附上numpy的练习题
1、从arr中提取所有的奇数,arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a = []
j = 1
for i in range(5):
a.append(arr[j])
j=j+2
print(a)
输出为:
[1, 3, 5, 7, 9]
更简便的办法:
arr[arr % 2 == 1]
2、如何反转二维数组的行和列?
arr = np.arange(9).reshape(3,3)
print(arr)
print(arr[::-1])#反转数组的行
print(arr[:,::-1])#反转数组的列
输出为:
[[0 1 2]
[3 4 5]
[6 7 8]]
[[6 7 8]
[3 4 5]
[0 1 2]]
[[2 1 0]
[5 4 3]
[8 7 6]]
3、如何从numpy数组中提取给定范围内的所有数字?
a = np.array([2, 6, 1, 9, 10, 3, 27]),获取5到10之间的所有项目。
a = np.arange(15)
index = np.where((a >= 5) & (a <= 10))
print(a[index])
输出为:
[ 5 6 7 8 9 10]