import numpy as np
ndarray
#创建数组,array
data1=[6,7,8,0,1]
np.array(data1)
#一维数组
array([6, 7, 8, 0, 1])
#创建多维数组
data2=[[1,2,3,4],[5,6,7,8]]
arr1=np.array(data2)
print(data2)
[[1, 2, 3, 4], [5, 6, 7, 8]]
#dtype数据类型
arr1.dtype
dtype('int32')
#shape属性
arr1.shape
(2, 4)
arr2=np.array(data2,dtype=np.int64)
print(arr2)
print(arr2.dtype)
[[1 2 3 4]
[5 6 7 8]]
int64
#float
data3=[6,7,5,8,0,1]
arr3=np.array(data3)
print(arr3)
print(arr3.dtype)
[6 7 5 8 0 1]
int32
#astype类型转换
arr3.astype(np.int64)
array([6, 7, 5, 8, 0, 1], dtype=int64)
#ones
np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
#zeros
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((3,6))
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
#数组和标量之间的运算
nd=np.array([1,2,3,4])
print(nd)
[1 2 3 4]
nd*2
array([2, 4, 6, 8])
nd*nd
array([ 1, 4, 9, 16])
nd+nd
array([2, 4, 6, 8])
基本的索引和切片
#arange,range函数的数组版
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nd1=np.arange(1,20,2)
print(nd1)
[ 1 3 5 7 9 11 13 15 17 19]
print(nd1[5])#索引第六个元素
#索引第3,4,5个元素及索引为2,3,4波包括5
print(nd1[2:5])
11
[5 7 9]
#通过索引赋值
nd1[2:5]=10
print(nd1)
[ 1 3 10 10 10 11 13 15 17 19]
#多维数组
data2=[[1,2,3,4],[5,6,7,8]]
nd=np.array(data2)
print(nd)
[[1 2 3 4]
[5 6 7 8]]
nd[:,1]#第二列的索引
array([2, 6])
nd[0]#代表二维数组的第一行
array([1, 2, 3, 4])
nd[1]
array([5, 6, 7, 8])
nd[0,3]
4
花式索引-Fancy indexing
#花式索引
nd=np.arange(32)
print(nd)
[ 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]
#reshape
nd1=np.reshape(nd,(8,4))
print(nd1)
[[ 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]]
#常规索引
nd1[0]
array([0, 1, 2, 3])
#花式索引,引入一个数组
nd1[[4,6,3,1]]#代表这四行的索引
array([[16, 17, 18, 19],
[24, 25, 26, 27],
[12, 13, 14, 15],
[ 4, 5, 6, 7]])
nd1[[1,5,7,2]]
array([[ 4, 5, 6, 7],
[20, 21, 22, 23],
[28, 29, 30, 31],
[ 8, 9, 10, 11]])
#选取多行多列交叉处的元素
nd1[[1,5,7,2],[0,3,1,2]]#前面代表行的索引,后面为列索引,得到一些点
array([ 4, 23, 29, 10])
如果希望获取一个矩形区域怎么办
#获取矩形区域的第一种方法
nd1[[1,5,7,2]][:,[0,3,1,2]]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
#获取矩形区域的第二种方法
nd1[np.ix_([1,5,7,2],[0,3,1,2])]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
通用函数(ufunc)
arr=np.arange(10)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
np.sqrt(arr)
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
B=np.arange(3)
print(B)
[0 1 2]
C=np.array([2,-1,4])
print(C)
[ 2 -1 4]
np.add(B,C)#表示B+C
array([2, 0, 6])
#maximum
np.maximum(B,C)#比较B,C中的对应元素
array([2, 1, 4])
常用数学与统计方法
#np.random.randn,随机函数
arr=np.random.randn(9)#随机生成9个元素
print(arr)
[-0.83429766 -0.45258848 -1.01153186 -1.96573331 0.61025561 -0.07908771
0.80952966 -0.80207134 -0.40176655]
#最值,min,max
print(arr.min())
print(arr.max())
-1.9657333127457315
0.8095296553208304
#均值,求和,排序
print(arr.mean())
arr.sort()
print(arr)
-0.4585879596646293
[-1.96573331 -1.01153186 -0.83429766 -0.80207134 -0.45258848 -0.40176655
-0.07908771 0.61025561 0.80952966]
#二维数组
arr1=np.random.randn(5,3)
print(arr1)
[[ 0.64789618 -1.0519086 1.01664657]
[ 1.34751378 -0.72561592 2.14896093]
[-0.98123432 0.84863767 -1.91041663]
[-1.5667028 -1.09888922 -1.32244298]
[-0.2944803 0.39376023 -1.65841034]]
#极值,均值,排序
print(arr1.min())
print(arr1.max())
print(arr1.mean())
arr1.sort()
print(arr1)
-1.910416627866521
2.1489609330898984
-0.2804457165306344
[[-1.0519086 0.64789618 1.01664657]
[-0.72561592 1.34751378 2.14896093]
[-1.91041663 -0.98123432 0.84863767]
[-1.5667028 -1.32244298 -1.09888922]
[-1.65841034 -0.2944803 0.39376023]]
arr1.sort(axis=0)#axis=0,按列j进行升序排序
print(arr1)
[[-1.91041663 -1.32244298 -1.09888922]
[-1.65841034 -0.98123432 0.39376023]
[-1.5667028 -0.2944803 0.84863767]
[-1.0519086 0.64789618 1.01664657]
[-0.72561592 1.34751378 2.14896093]]
#linspace
np.linspace(0,10,2)#两个端点
array([ 0., 10.])
np.linspace(0,10,5)#5个端点
array([ 0. , 2.5, 5. , 7.5, 10. ])
np.linspace(0,10,11)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
线性代数
x=np.array([[1,2,3],[4,5,6]])
print(x)
[[1 2 3]
[4 5 6]]
y=np.array([[6,23],[-1,7],[8,9]])
print(y)
[[ 6 23]
[-1 7]
[ 8 9]]
x.dot(y)#x左乘y,x的列数与y的行数相等
array([[ 28, 64],
[ 67, 181]])
m=np.array([[4,2],[3,1]])
print(m)
[[4 2]
[3 1]]
from numpy.linalg import inv
inv(m)
array([[-0.5, 1. ],
[ 1.5, -2. ]])
随机数的生成
from numpy import random
#normal
rArray=random.normal(size=(4,4))
print(rArray)
[[ 0.70998156 -1.03662731 0.15157774 0.35032601]
[-1.29359208 0.12856242 -0.14207438 0.29285926]
[ 1.13685027 -0.81536526 -1.55133895 0.72945727]
[ 1.71221626 0.63385447 0.23059643 1.55721617]]
#rabdint,产生给定上下限范围内的随机选取整数
random.randint(0,2)
0
i=0
while i<20:#执行20次
print(random.randint(0,2))
i+=1
1
1
1
0
1
1
0
1
0
0
1
0
0
1
0
1
1
0
1
1