import numpy as np
Numpy的主要对象是同质的多维数组array
为了可视化切片过程,我们把二维数组的垂直方向定义为 axis 0
轴,水平方向为 axis 1
轴。
一、创建数组
创建Numpy数组一般有三种方法:
(1)通过传入可迭代对象创建,我将之称为基本方法np.array()
(2)使用Numpy内部功能函数,内部方法
(3)使用特殊的库函数,特殊方法
(1)np.array()
(2)np.ones()、np.zeros()、np.eye()、np.empty()
函数
zeros
创建一个都是0的数组,函数
ones
创建一个都是1的数组,函数
empty
创建一个初始内容是0或者垃圾值的数组,这取决于内存当时的状态。默认情况下,创建的数组的数据类型为float64
np.zeros(3)
np.zeros( (3,4) )
np.ones( (2,3,4), dtype=np.int16 )
np.empty( (2,3) ) # 根据当前内存状态的不同,可能会返回未初始化的垃圾数值,不安全。
np.full((3,4), 2.2) # 创建一个全部由2.22组成的数组
(3)特殊方法:
1.np.arange()
2.np.linspace()
注意
1.endpoint默认为True:
np.linspace()默认是包含终点的 [start,end]
2.dtype
如果未给出数据类型,则从开始和停止推断数据类型。
推断出的数据类型永远不会是整数;即使参数将生成整数数组,也会选择float。
(3)np.logspace()
参数设置类似于np.linspace()
1.endpoint默认为True:
np.logspace()默认是包含终点的 [start,end]
2.dtype
如果未给出数据类型,则从开始和停止推断数据类型。
推断出的数据类型永远不会是整数;即使参数将生成整数数组,也会选择float。
3.base默认为10:
相当于10**np.linspace()
(4)np.identity()
(5)np.random—— .randint() .rand() .stardard_normal()
(6)np.diag()
二、测试两数组是否相同(相近)——np.isclose(),np.allclose()
isclose()
,allclose()
函数来测试两个数组中对应位置上的元素在允许的范围内是否相等。并可以接收绝对误差参数和相对误差参数。
allclose()
:返回单个True
或False
isclose()
:返回若干True/False
的列表
三、修改数组
1.np.append()
返回新数组,不影响原来的数组
注意一维数组和多维数组追加的区别:
n维数组要保持维度,只能追加n维数组,不然报错;
多维数组追加一维数组后,会变成一维数组(axis=None,先展平)
ndarray没有这个方法,而是numpy下的:
多维数组的行追加、列追加和多维追加(axis=0,axis=1……):
2.np.insert()
返回新数组,不影响原来的数组
注意一维数组和多维数组插入的区别:
axis=None时,会先将数组展平
3.切片
四、数组的运算
1.数组与标量
2.数组与数组
等长数组:对应元素相加
不等长数组:广播
3.数组的内积
4.数学函数
x = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
print(x)
print(np.sin(x)) # 一维数组中所有元素求正弦值
print(np.cos(x)) # 二维数组中所有元素求余弦值
print(np.round(np.cos(x))) # 四舍五入
print(np.ceil(x/2)) # 向上取整
5.布尔运算 ><== &| np.all() np.any() np.sum()
五、数组排序
1.ndarray.sort(),numpy.sort()
axis=0:列的元素改变位置,垂直方向计算
axis=1:行的元素改变位置,水平方向计算
2.np.argsort(),np.argmax(),np.argmin()
# _表示上一条语句
六、赋值、深复制、浅复制(视图)
赋值:对同一对象新建了一个引用
浅复制:共享数据,保存在base数组中(改变数据会互相影响)
深复制:新建完全不同的两个对象,除了初始数据相同
numpy中的array只有赋值受到改变形状的影响;
赋值、切片、视图均受到改变值的影响
在python标准库中,
对list对象——
赋值相当于新建引用(始终为同一变量),
切片相当于浅拷贝(只拷贝外层元素,内部嵌套元素通过引用,而不是独立分配内存)
但切片不会受到改变值的影响
跟 int对象一样
七、访问数组
1.下标、切片
a[x1][y1]
a[x1,y1] # 输出a[x1][y1]
a[[x1,x2,x3],[y1,y2,y3]] # 输出a[x1][y1],a[x2][y2],a[x3][y3]
a[x1:x3,y1:y3] # 输出a[x1][y1:y3],a[x2][y1:y3]
# 输出a[x1][y1],a[x1][y2],a[x2][y1],a[x2][y2]
a[x1] # 输出a[x1][:]
a[[x1,x2,x3]] # 输出a[x1][:],a[x2][:],a[x3][:]
a[:,[y1,y2,y3]] # 输出a[:][y1],a[:][y2],a[:][y3]
八、改变形状 x.shape x.reshape() x.resize()
1. x.shape x.size
x.shape:返回形状的元组
x.size:元素总个数
2. x.reshape()
3. x.resize() np.resize()
注意:array不能引用或被引用
ValueError: cannot resize an array that references or is referenced ...np.resize()则没有这个要求