python之Numpy学习笔记

1 基本操做

1.1 array

建立数组:python

import numpy as np
 np.array([1,2,3,4],dtype=int64)
复制代码

改变数组维度:数组

np.arange(15).reshape(3,5)
复制代码

1.2 矩阵

建立矩阵:bash

import numpy as np
 np.full(shape=(3,5),full_value=10)
复制代码

创建一个3行5列,而且值全为10的矩阵;dom

1.3 linspace

做用:按照给定的个数,本身计算步长,生成最终的数组。性能

np.linspace(0,20,10)
# 三个参数: 第一二个参数是起始点和终点,第三个参数是要生成的个数
复制代码

运行结果: 大数据

1.4 random

生成随机数:spa

np.random.randint(0,10,10)
#建立一个包含10个数的随机数组
复制代码

注意:它是取不到10的,由于是左闭右开的。设计

生成随机矩阵:3d

np.random.randint(4,8,size=(3,5))
复制代码

若是想要解决每次生成的随机数不同的问题,能够采用seed,这样每次生成的随机数就会同样了。code

栗子:

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)
# '-'是非运算符
复制代码
相关文章
相关标签/搜索