Numpy
导入:import numpy as np
1.创建数组
一维数组的创建
arr1=np.array([1,2,3,4,5],float)二维数组的创建
arr2=np.array([[1,2,3],[3,4,5],[1,5,8]])
注意:
如果传进来的列表中包含不同的类型,则统一为统一类型,str>float>int
2.使用np的routines函数创建
np.ones([3,3])
输出结果:
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])np.full([3,3],3.14)
输出结果:
array([[ 3.14, 3.14, 3.14],
[ 3.14, 3.14, 3.14],
[ 3.14, 3.14, 3.14]])np.eye(4)
eye()返回一个对角线为1的矩阵
输出结果:
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])等差数列(此处num=5)
np.linspace(0,10,5)
输出结果:
array([ 0. , 2.5, 5. , 7.5, 10. ])等差数列(此处step=2)
np.arange(0,10,2)
输出结果:
array([0, 2, 4, 6, 8])随机整数
np.random.randint(0,10,5)
输出结果:
array([0, 7, 2, 3, 7])np.random.seed(100)#随机的种子,有了种子,每次都一样
np.random.randn(10)
输出结果:
array([ 0.37332715, -0.2887605 , 0.04985088, -0.93815832, -0.4087037 ,
1.13352254, 0.52713526, -0.76014192, -0.97292788, 0.16290446])random.random()默认0-1,左开右闭
np.random.seed(3)#时间种子,将时间固定,产生固定不变的随机数
np.random.random(size=[2,2])
输出结果:
array([[0.5507979 , 0.70814782],
[0.29090474, 0.51082761]])
3.ndarray的属性
4个必记参数:
- ndim:维度
- shape:形状
- size:总长度
- dtype:元素类型
注意:dtype返回数组元素的类型,type()函数返回数组类型
4.索引
一维与列表完全一致 多维时同理
arr=np.random.randint(10,50,size=(3,4))
arr
a
array([[19, 46, 25, 10],
[38, 35, 39, 39],
[18, 19, 10, 46]])
arr[1][2]
39
5.切片
用以上例子中的a:
a[0:2] 获取前两行
a[0:2,0:2] 获取前两行前两列
a[:,0:2] 获取前两列
a[::-1] 行倒序
a[:,::-1] 列倒序
a[::-1,::-1] 行、列全部倒序
6.变形
arr=np.random.randint(1,100,size=(100,))
将一个一维数组arr变成多维数组
arr.reshape((10,10)) #两个参数分别是新数组的行和列
将多维数组变成一维数组
a.reshape(12) #12是数组长度
arr.reshape(-1,10)
-1:手动指定列数,自动计算行数
7.级联
np.concatenate() 级联需要注意的点:
- 级联的参数是列表:一定要加中括号
- 维度必须相同
- 形状相符
- axis参数:0表示纵向级联,1表示横向级联;axis的范围由数组维度决定0-(维度-1)
np.hstack与np.vstack 水平级联与垂直级联
8.切分
- np.spilt()
x = np.arange(1,10)
x
输出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
x1,x2,x3 = np.split(x,[3,5])
print(x1,x2,x3)
输出:
[1 2 3] [4 5] [6 7 8 9]
np.hsplit() 切分行
x = np.arange(16).reshape(4,4) x 输出: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) print(np.hsplit(x,[2,3])) 输出: [array([[ 0, 1],[ 4, 5], [ 8, 9], [12, 13]]), array([[ 2], [ 6], [10], [14]]), array([[ 3], [ 7], [11], [15]])]
np.vsplit () 切分列
x = np.arange(16).reshape(4,4) x 输出: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) print(np.vsplit(x,[2,3])) 输出: [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
9.副本
所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效
a = np.array([1,2,3]) b=a print(a,b) 输出: [1 2 3] [1 2 3] b[0]=2 a 输出: array([2, 2, 3])
copy()函数可创建副本,对副本的操作,不会影响原来的对象
a = np.array([1,2,3]) b = a.copy() b 输出: [1,2,3] b[0]=3 print(a,b) 输出: [1 2 3] [3 2 3]
10.使用matplotlib.pyplot获取一个数组,数据来源于一张图片
import matplotlib.pyplot as plt
img=plt.imread('C:/Users/jiaxinyi/Desktop/a4coho1467042412050.jpg')
img.shape #得到的数组形状
输出:
(650,1200,3)