导入包
import numpy as np
查看numpy版本
np.__version__
'1.14.0'
创建ndarray(一维),dtype指定创建的数据类型
arry1=np.array([1,2,3,4],dtype='float')
arry1
array([1., 2., 3., 4.])
创建二维ndarray
arry2=np.array([[1,2,3],[4,5,6]])
arry2
array([[1, 2, 3],
[4, 5, 6]])
查看array的类型
type(arry1)
numpy.ndarray
查看arry1的形状,2行3列
np.shape(arry2)
(2, 3)
查看arry2的总长度,共有多少个数据
np.size(arry2)
6
创建数据值为1的数组,默认数据类型为浮点型
np.ones((3,4),dtype='int'
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
创建数据值为0的数组,默认数据类型为浮点型
np.zeros((3,4),dtype='int')
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
创建数据值为相同的指定值得数组,默认类型为浮点型
np.full((3,4),fill_value=10,dtype='int')
array([[10, 10, 10, 10],
[10, 10, 10, 10],
[10, 10, 10, 10]])
创建等差数列,默认数据类型为浮点型,num为有num个数据
np.linspace(start=0,stop=50,num=51,dtype='int')
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 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, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])
创建等差数列,指定差值为stype,100取不到
np.arange(0,100,step=4)
array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64,
68, 72, 76, 80, 84, 88, 92, 96])
生成随机整型数组,0-100的3行4列整型随机数组
np.random.randint(0,100,(3,4))
array([[45, 88, 93, 40],
[22, 32, 3, 54],
[57, 20, 82, 11]])
使其不再随机变化
固定随机数组,使其不再随机变化
np.random.seed(3)
np.random.randint(0,111,(4,3))
array([[106, 24, 3],
[ 56, 72, 0],
[ 21, 19, 74],
[107, 41, 10]]
生成随机的[0,1)的随机数组
np.random.random((3,4))
array([[0.03225237, 0.87364571, 0.70605397, 0.61450945],
[0.26603757, 0.9678689 , 0.04791921, 0.71872623],
[0.7781943 , 0.27845611, 0.19199206, 0.22917275]])
生成对角线为1的n行n列数组
np.eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
查看数组的维度
arry2.ndim
2
根据索引查找数值
arry3=np.random.randint(1,100,(4,6))
arry3
array([[ 8, 44, 34, 80, 49, 38],
[21, 95, 50, 22, 79, 29],
[55, 1, 65, 19, 64, 38],
[57, 57, 72, 38, 47, 34]])
arry3[1]
array([21, 95, 50, 22, 79, 29])
arry3[1][2]
50
切片 [n,m),左闭右开
arry3[0:2]
array([[ 8, 44, 34, 80, 49, 38],
[21, 95, 50, 22, 79, 29]])
获取指定的行列,在切片中[n,:m,j:k]n:m代表行,j:k代表列
arry3[0:2,0:3]
array([[ 8, 44, 34],
[21, 95, 50]])
将数组进行行倒序
arry3[::-1,]
array([[57, 57, 72, 38, 47, 34],
[55, 1, 65, 19, 64, 38],
[21, 95, 50, 22, 79, 29],
[ 8, 44, 34, 80, 49, 38]])
将数组进行列倒序
arry3[:,::-1]
array([[38, 49, 80, 34, 44, 8],
[29, 79, 22, 50, 95, 21],
[38, 64, 19, 65, 1, 55],
[34, 47, 38, 72, 57, 57]])
将数组进行整体倒序
arry3[::-1,::-1]
array([[34, 47, 38, 72, 57, 57],
[38, 64, 19, 65, 1, 55],
[29, 79, 22, 50, 95, 21],
[38, 49, 80, 34, 44, 8]])
将数组进行变形,前提是数组的总长度一致
arry3.reshape(3,8)
array([[ 8, 44, 34, 80, 49, 38, 21, 95],
[50, 22, 79, 29, 55, 1, 65, 19],
[64, 38, 57, 57, 72, 38, 47, 34]])
二维变一维
arry4=arry3.reshape(24)
arry4
array([ 8, 44, 34, 80, 49, 38, 21, 95, 50, 22, 79, 29, 55, 1, 65, 19, 64,
38, 57, 57, 72, 38, 47, 34])
将一维变二维,指定列为3列,自动生成行,制定行同理
arry4.reshape(-1,3)
array([[ 8, 44, 34],
[80, 49, 38],
[21, 95, 50],
[22, 79, 29],
[55, 1, 65],
[19, 64, 38],
[57, 57, 72],
[38, 47, 34]])
arry1
array([1., 2., 3., 4.])
一维数组进行级联
np.concatenate([arry1,arry1])
array([1., 2., 3., 4., 1., 2., 3., 4.])
a1=np.random.randint(0,100,(3,4))
a2=np.random.randint(0,100,(3,4))
a1
array([[ 1, 85, 74, 99],
[91, 16, 80, 32],
[16, 18, 75, 55]])
a2
array([[96, 95, 13, 37],
[30, 48, 61, 33],
[52, 2, 28, 36]])
二维数组进行级联,默认为行级联,axis=0,表示列级联
axis=1,表示行级联
np.concatenate([a1,a2],axis=1)
array([[ 1, 85, 74, 99, 96, 95, 13, 37],
[91, 16, 80, 32, 30, 48, 61, 33],
[16, 18, 75, 55, 52, 2, 28, 36]])
级联需要注意的点:
级联的参数是列表:一定要加中括号或小括号
维度必须相同
形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
可通过axis参数改变级联的方向
ndarray的聚合操作
a1
array([[ 1, 85, 74, 99],
[91, 16, 80, 32],
[16, 18, 75, 55]])
求数组中的最大值/最小值max()/min()
a1[2].max()
75
求数组中的平均值
a1.mean()
53.5
求和
a1[0].sum()
259
加,减,乘,除运算
a1+1
array([[ 2, 86, 75, 100],
[ 92, 17, 81, 33],
[ 17, 19, 76, 56]])
矩阵积np.dot() :两个集合中,a的行数和b的列数必须保持一致
a3=np.random.randint(1,100,(2,2))
a4=np.random.randint(1,100,(2,2))
a3
array([[91, 45],
[49, 60]]
a4
array([[75, 55],
[92, 22]])
np.dot(a3,a4)
array([[10965, 5995],
[ 9195, 4015]])
广播机制
【重要】ndarray广播机制的三条规则:缺失维度的数组将维度补充为进行运算的数组的维度。缺失的数组元素使用已有元素进行补充。
规则一:为缺失的维度补1
规则二:缺失元素用已有值填充
规则三:缺失维度的数组只能有一行或者一列
a=np.ones((4,4),dtype='int')
a
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
b=np.ones(4,dtype='int')
b
array([1, 1, 1, 1])
a+b
array([[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]])
c=b.reshape(4,1)
c
array([[1],
[1],
[1],
[1]])
a+c
array([[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]])
排序np.sort(x)不改变原数组,x.sort()改变原数组,默认从小到大排序,行排序
arry3
array([[ 8, 34, 29, 44, 49, 80],
[21, 22, 38, 50, 79, 95],
[ 1, 19, 38, 55, 64, 65],
[34, 38, 47, 57, 57, 72]])
np.sort(arry3,axis=0,)
array([[ 1, 19, 29, 44, 49, 65],
[ 8, 22, 38, 50, 57, 72],
[21, 34, 38, 55, 64, 80],
[34, 38, 47, 57, 79, 95]])