1 基本操作
1.1 array
创建数组:
import numpy as np
np.array([1,2,3,4],dtype=int64)
复制代码
改变数组维度:
np.arange(15).reshape(3,5)
复制代码
1.2 矩阵
创建矩阵:
import numpy as np
np.full(shape=(3,5),full_value=10)
复制代码
建立一个3行5列,并且值全为10的矩阵;
1.3 linspace
作用:按照给定的个数,自己计算步长,生成最终的数组。
np.linspace(0,20,10)
# 三个参数: 第一二个参数是起始点和终点,第三个参数是要生成的个数
复制代码
运行结果:
1.4 random
生成随机数:
np.random.randint(0,10,10)
#创建一个包含10个数的随机数组
复制代码
注意:它是取不到10的,因为是左闭右开的。
生成随机矩阵:
np.random.randint(4,8,size=(3,5))
复制代码
如果想要解决每次生成的随机数不一样的问题,可以采用seed
,这样每次生成的随机数就会一样了。
栗子:
np.random.seed(666)
# 以666为种子生成随机数
random.random()
#生成默认是在0,1之间的随机数
复制代码
如果要生成符合正态分布的随机数:
np.random.normal(10,100)
#生成均值为10,方差为100的随机矩阵
复制代码
1.5 访问多维数组
访问方式:
X[2,2]
#可以访问,但是不建议采用X[2][2]这种方式,而是采用下面的切片方式
复制代码
切片方式:
x = np.arange(15).reshape(3,5)
x[:2]
# 返回前两行生成的数组。
复制代码
运行结果:
x[2:]
#返回第二行到最后一行的数组
x[:2,:3]
#前两行,前三列,返回一个2X3的数组
X[:2][:3]
#将只返回前两行
X[::-1,::-1]
#从最后一行访问,从最后一列进行访问
X[:,0]
# 只取一列
复制代码
注意:切片是原始数组的视图,视图上任何操作都会印象原始数据这样设计的目的是处理大数据,如果Numpy坚持要将数据复制来复制去会产生何等的性能和内存问题。
如果想要一份副本,而不是视图,采用copy
:
subX = x[:2,:3].copy()
复制代码
此时对切片数组进行的任何操作将不会影响原来的数组。
1.6 reshape
作用:修改数组维度
栗子:
x.reshape(-1,10)
# 只想得到10列,几行不关注
复制代码
注意:reshape新生成数组和原数组公用一个内存,不管改变哪个都会互相影响
2. Numpy数组的合并与分割
2.1 合并操作
x = np.array([1,2,3])
y= np.array([3,2,1])
np.concatenate([x,y])
#结果:array([1,2,3,3,2,1])
复制代码
多维呢?
A = np.array([1,2,3],[4,5,6])
np.concatenate([A,A])
复制代码
结果:
如果想要改变拼接方式,用axis
:
np.concatenate([A,A],axis = 1)
复制代码
注意:
concatenate
只能拼接相同维度的矩阵。如果想要拼接,可以采用reshape将低维变成高维,然后再进行操作。
当然,如果不想转换,也可以用vstack
和hstack
。这两个方法内部封装了转换。
vstack
: 垂直方向堆叠hstack
:水平方向堆叠
2.2 分割操作split
反手就是一个栗子:
再来一个栗子:
当然,除了可以水平切,也可以竖直切,还是传入参数axis
。 这里就不举例了。
however,Numpy大哥担心用起来还是太复杂,又又又封装了两个方法,一个是vsplit
,一个hsplit
。
vsplit
举例:
hsplit
举例:
2.3 Numpy.array中的运算
2.4 Universal Functions
2.5 矩阵运算
相乘:
转置:
堆叠:
矩阵的逆:
伪逆矩阵:
2.6 Numpy中的聚合运算
np.sum(L)
# 其实python也提供了sum操作,然而使用Numpy效率更高,差距是100多倍,完全不是一个级别的!!
复制代码
求最小值和最大值:
np.min(big_array)
np.max(big_array)
复制代码
对于二维矩阵的聚合运算:
如果想求出每行的和或者每列的和呢?答案还是axis
:
axis= 0
表示沿着行的方向进行计算,也就是说进行列的相加操作。比较绕~~~
对矩阵中的元素相乘,用prod()
:
如果是对里面的元素进行+1后再相乘呢?
同理还有:
np.mean(x)
#求平均数
np.median(x)
#求中值
np.percenttile(array,q=25)
#求在数组中大于25%的百分位点的比例;
np.var(array)
#方差
np.std(array)
#标准差
复制代码
2.7 索引
求最小值的索引:
np.argmin(x)
复制代码
2.8 排序和使用索引
对数组进行排序:
np.sort()
#不改变元数组
x.sort()
#改变原数组
np.argsort(x)
#返回排序后的索引数组
np.partition(x,3)
#快速排序,按照比3小的和比3大的分成两边,记住,不是有序的
#np.argpartition(x,3)
#快速排序的索引数组
复制代码
2.9 numpy.array的比较
x<3
#将x数组中的所有元素和3比较,然后返回[True,False...]的数组
2*x == 24 -4 * x
#将x数组中的所有元素带入公式,然后返回[True,False...]的数组(满足返回True)
np.sum(x<=3)
np.count_nonzero(x<=3)
np.any(x=0)
#x中任何一个元素等于0,返回True
np.all(x>0)
#x中所有元素大于0,返回True
np.sum(x % 2 == 0)
#满足这个公式的数值的和
np.sum((x>3) & (x < 10))
#注意用的是'&'
np.sum(-(x==0)
# '-'是非运算符
复制代码