numpy
来源:互联网 发布:碑文排版软件 编辑:程序博客网 时间:2024/06/06 01:23
导入numpy库
import numpy as np
numpy默认ndarray的所有元素的类型是相同的
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
python 的list类型只能是一维,而ndarray可以是多维的
test=np.array([1,2,3,4,5])
test
array([1, 2, 3, 4, 5])
多维:
test=np.array([[1,2,3],[4,5,6]])
test
array([[1, 2, 3],
[4, 5, 6]])
[4, 5, 6]])
2. 使用np的routines函数创建
1) 利用1) np.ones(shape, dtype=None, order='C')函数创建二维全部为1的二维数组
np.ones([3,3])
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
[ 1., 1., 1.],
[ 1., 1., 1.]])
同时可设置类型为整型
np.ones([3,3],dtype=int)
2)利用 np.zeros(shape, dtype=float, order='C')函数创建全部为0的二维数组
np.zeros([3,3])
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
[ 0., 0., 0.],
[ 0., 0., 0.]])
3)创建二维数组,内部值都为均一值
np.full(shape, fill_value, dtype=None, order='C')
np.full([3,3],3.5)
array([[ 3.5, 3.5, 3.5],
[ 3.5, 3.5, 3.5],
[ 3.5, 3.5, 3.5]])
[ 3.5, 3.5, 3.5],
[ 3.5, 3.5, 3.5]])
4)对角线值都为1 的二维数组
np.eye(N, M=None, k=0, dtype=float)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
[ 0., 1., 0.],
[ 0., 0., 1.]])
K参数可写0,-1,1,2,-2,3(大于3则效果与3相同)
5)等差数列取值np.linspace()开始跟结束的值均能取到,其余的平分
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
np.linspace(0,10,11,dtype=int)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
6)利用np.arange()求等差数列
np.arange([start, ]stop, [step, ]dtype=None)
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
array([0, 2, 4, 6, 8])
7)利用np.random.
a)np.random.randint(low, high=None, size=None, dtype='l')
np.random.randint(0,10,size=(3,4,5))
np.random.randint(0,10,size=(3,4,5))
array([[[0, 0, 7, 3, 9],
[3, 4, 2, 7, 9],
[2, 6, 4, 0, 8],
[8, 1, 8, 3, 5]],
[[5, 5, 0, 3, 2],
[8, 1, 3, 1, 5],
[5, 4, 5, 4, 5],
[1, 6, 9, 7, 0]],
[[5, 9, 7, 3, 6],
[7, 6, 1, 3, 0],
[0, 3, 6, 7, 0],
[7, 6, 8, 3, 3]]])
[3, 4, 2, 7, 9],
[2, 6, 4, 0, 8],
[8, 1, 8, 3, 5]],
[[5, 5, 0, 3, 2],
[8, 1, 3, 1, 5],
[5, 4, 5, 4, 5],
[1, 6, 9, 7, 0]],
[[5, 9, 7, 3, 6],
[7, 6, 1, 3, 0],
[0, 3, 6, 7, 0],
[7, 6, 8, 3, 3]]])
b)np.random.randn(d0, d1, ..., dn)
np.random.seed(0)
np.random.randn(10)
np.random.randn(10)
array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862, 0.86540763,
-2.3015387 , 1.74481176, -0.7612069 , 0.3190391 , -0.24937038])
-2.3015387 , 1.74481176, -0.7612069 , 0.3190391 , -0.24937038])
c)np.random.random(size=None)
np.random.random(2)
array([ 0.97861834, 0.79915856])
二、ndarray的属性
4个必记参数: ndim:维度 shape:形状(各维度的长度) size:总长度
dtype:元素类型
4个必记参数: ndim:维度 shape:形状(各维度的长度) size:总长度
dtype:元素类型
三、ndarray的基本操作
1. 切片
一维与列表完全一致 多维时同理
一维与列表完全一致 多维时同理
np.random.seed(0)
x = np.random.randint(1,10,(3,4))
x
x = np.random.randint(1,10,(3,4))
x
array([[6, 1, 4, 4],
[8, 4, 6, 3],
[5, 8, 7, 9]])
[8, 4, 6, 3],
[5, 8, 7, 9]])
x[:2]
array([[6, 1, 4, 4],
[8, 4, 6, 3]])
[8, 4, 6, 3]])
x[:,:-1]
array([[6, 1, 4],
[8, 4, 6],
[5, 8, 7]])
[8, 4, 6],
[5, 8, 7]])
2. 变形
使用reshape函数,注意参数是一个tuple!
使用reshape函数,注意参数是一个tuple!
x=np.arange(1,10).reshape((3,3))
x
x
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
[4, 5, 6],
[7, 8, 9]])
3. 级联
1)np.concatenate() 级联需要注意的点:
2)级联的参数是列表:一定要加中括号
3)维度必须相同
4)形状相符
【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
可通过axis参数改变级联的方向
1)np.concatenate() 级联需要注意的点:
2)级联的参数是列表:一定要加中括号
3)维度必须相同
4)形状相符
【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
可通过axis参数改变级联的方向
z1=np.array([[1,2,3],[4,5,6]])
z1
z1
array([[1, 2, 3],
[4, 5, 6]])
[4, 5, 6]])
y1=np.array([[7,8,9],[12,22,23]])
y1
array([[ 7, 8, 9],
[12, 22, 23]])
[12, 22, 23]])
np.concatenate([z1,y1],axis=1) 水平级联
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 12, 22, 23]])
[ 4, 5, 6, 12, 22, 23]])
np.concatenate([z1,y1]) 默认为垂直级联
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[12, 22, 23]])
[ 4, 5, 6],
[ 7, 8, 9],
[12, 22, 23]])
4切分:
np.split
np.vsplit
np.hsplit
np.split
np.vsplit
np.hsplit
x=np.arange(1,10)
x
x
x1,x2,x3=np.split(x,[3,5])
display(x1,x2,x3)
array([1, 2, 3])
array([4, 5])
array([6, 7, 8, 9])
array([4, 5])
array([6, 7, 8, 9])
np.vsplit() 垂直切分
x=x.reshape((3,3))
np.vsplit(x,[2])
[array([[1, 2, 3],
[4, 5, 6]]), array([[7, 8, 9]])]
[4, 5, 6]]), array([[7, 8, 9]])]
np.hsplit()
np.hsplit(x,[1,2]) [1,2]表示下标为在第1列之前切分一次,在第二列前切分一次
[array([[1],
[4],
[7]]), array([[2],
[5],
[8]]), array([[3],
[6],
[9]])]
[4],
[7]]), array([[2],
[5],
[8]]), array([[3],
[6],
[9]])]
5. 副本
所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。
所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。
1)直接赋值 类似于浅拷贝
a=np.array([1,2,3])
b=a
b=a
display(a,b)
array([1, 2, 3])
array([1, 2, 3])
array([1, 2, 3])
b[0]=2
display(a,b)
display(a,b)
array([2, 2, 3])
array([2, 2, 3])
2)可使用copy()函数创建副本 类似于深拷贝
c=a.copy()
c
c
array([2, 2, 3])
c[0]=3
display(a,c)
display(a,c)
array([2, 2, 3])
array([3, 2, 3])
array([3, 2, 3])
四、ndarray的聚合操作
1. 求和np.sum
1. 求和np.sum
np.random.seed(0)
a=np.random.random(2)
%timeit sum(a) / %timeit np.sum(a)
a=np.random.random(2)
%timeit sum(a) / %timeit np.sum(a)
2. 最大最小值:np.max/ np.min
ma=max(a)
mi=min(a)
display(ma,mi)
mi=min(a)
display(ma,mi)
3. 其他聚合操作
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin(返回最小值的下标,axis=0,以列为组) np.nanargmin Find index of minimum value
np.argmax (返回最大值的下标,axis=1,以行为组) np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin(返回最小值的下标,axis=0,以列为组) np.nanargmin Find index of minimum value
np.argmax (返回最大值的下标,axis=1,以行为组) np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
五、ndarray的矩阵操作
1. 基本矩阵操作
1) 算术运算符:
加减乘除
加减乘除
a=np.array([[1,2,3],[4,5,6]])
a
a
array([[1, 2, 3],
[4, 5, 6]])
[4, 5, 6]])
a+1
array([[2, 3, 4],
[5, 6, 7]])
[5, 6, 7]])
a-1
array([[0, 1, 2],
[3, 4, 5]])
[3, 4, 5]])
a*2
array([[ 2, 4, 6],
[ 8, 10, 12]])
[ 8, 10, 12]])
a/2
array([[ 0.5, 1. , 1.5],
[ 2. , 2.5, 3. ]])
[ 2. , 2.5, 3. ]])
2.矩阵积
b=np.arange(6).reshape((3,2))
b
array([[0, 1],
[2, 3],
[4, 5]])
[2, 3],
[4, 5]])
b=np.ones((3,2),dtype=int)
b
b
Out[124]:
array([[1, 1],
[1, 1],
[1, 1]])
array([[1, 1],
[1, 1],
[1, 1]])
np.dot(a,b)
array([[ 6, 6],
[15, 15]])
[15, 15]])
3.广播机制
原则:
1:为缺失元素补1
2:假定缺失元素用已有值填充
m=np.ones((2,3),dtype=int)
n=np.arange(3)
display(m,n)
n=np.arange(3)
display(m,n)
array([[1, 1, 1],
[1, 1, 1]])
array([0, 1, 2])
[1, 1, 1]])
array([0, 1, 2])
m+n
array([[1, 2, 3],
[1, 2, 3]])
[1, 2, 3]])
六、ndarray的排序
1:快速排序
np.sort() :不改变原有输入值的顺序
ndarray.sort()本地处理,不占有呢村但改变原有输入值的顺序
np.random.seed(0)
a=np.random.randint(0,100,10)
a
a=np.random.randint(0,100,10)
a
array([44, 47, 64, 67, 67, 9, 83, 21, 36, 87])
np.sort(a)
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87])
a
array([44, 47, 64, 67, 67, 9, 83, 21, 36, 87])
ndarray.sort():::
a.sort()
a
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87])
a
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87]) #a的值已经发生变化,因此在数据处理过程中,尽量不对元数据做出改变,因此不建议使用这种方法
2. 部分排序
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
当k为正时,我们想要得到最小的k个数
当k为负时,我们想要得到最大的k个数
a=np.random.randint(0,100,10)
a
array([70, 88, 88, 12, 58, 65, 39, 87, 46, 88])
np.partition(a,3) #后面的参数为正数时,对将最小三个数放到前面
array([12, 39, 46, 58, 65, 70, 88, 87, 88, 88])
np.partition(a,-3) #参数为负数时对最大的n位数进行排序
array([65, 58, 46, 12, 39, 70, 87, 88, 88, 88])
阅读全文
0 0
- Numpy
- numpy
- numpy
- Numpy
- numpy
- numpy
- numpy
- NumPy
- numpy
- numpy
- Numpy
- numpy
- Numpy
- Numpy
- Numpy
- Numpy
- NumPy
- numpy
- linux下(CentOS6.4)mysql安装
- app同包同签名不能安装问题
- Button点击事件的四种方法
- java测试框架-junit4
- Attempt to read from field 'int android.graphics.Rect.bottom' on a null object reference
- numpy
- TCP下的套接字编程
- 算法笔记(2) 冒泡排序和插入排序
- 谷歌浏览器常用扩展
- 欢迎使用CSDN-markdown编辑器
- HTTPS简易流程
- dos下显示异常
- Anconda 机器学习环境管理
- java日期格式转换毫秒