python之Numpy学习笔记

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将低维变成高维,然后再进行操作。

当然,如果不想转换,也可以用vstackhstack。这两个方法内部封装了转换。

  • 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)
# '-'是非运算符
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值