python数据处理(一)numpy的使用

1、numpy的基本属性

numpy是基于矩阵的计算

import numpy as np
array=np.array(alist)#把列表转化为矩阵
array.ndim#维数,返回len(alist)
array.shape #行数和列数,返回(m,n),其中m=len(alist),n=len(alist[0])
array.size#返回m*n

2、创建数组

import numpy as np
a=np.arrry([2,3,4],dtype=np.int)#定义数据类型默认为64位,也可以np.int32,还有float(默认为64位),float32
print(a.dtype)#查看数据类型
a=np.zeros((m,n))m行n列的0矩阵
a=np.ones((3,4),dtype=int16)
a=np.empty((3,4))#是非常接近零的数组成
a=np.arange(10,20,step)#生成有序数列
a=np.arange(12).reshape((3,4))#生成3行4列的0-12组成的矩阵
a=np.linspace(1,10,20)#生成从1到10的有20个元素的等差数列(包括1和10)
a=np.linspace(1,10,6).reshape((2,3))#同样可以改变形状

3、numpy的基础运算

数组运算

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
c=a-b#对应元素做减法
c=a+b#同理
a=c*b#对应元素相乘
c=b**2#每个元素做平方
c=10*np.sin(a)#对应元素做sin,cos,tan,用的是弧度制,不是度数
c=(b<3)#返回列表[True True True False]

矩阵运算

import numpy as np
a=np.array([1,1]
           [0,1])
b=np.arange(4).reshape((2,2))
c=a-b#对应元素做减法
c=a+b#同理
a=c*b#对应元素相乘
c=np.dot(a,b)#矩阵乘法
c=a.dot(b)#同上
c=b**2#每个元素做平方
c=10*np.sin(a)#对应元素做sin,cos,tan,用的是弧度制,不是度数
c=(b<3)
a=np.random.random((2,4))#生成随机矩阵
n=np.sum(a,axis=1)#axis是定义维度,如果为0是按列求和,为1按行求和
n=np.min(a,axis=1)
n=np.max(a,axis=1)

复杂运算

import numpy as np
A=np.arange(2,14).reshape((3,4))
np.argmin(A)#A中最小元素的索引,返回0
np.argmax(A)#A中最大元素的索引,返回11
#虽然返回的是11,但是要想索引该数还是要用列表的方法A[2][3]
np.mean(A)#平均值
A.mean(A)#同上
np.average(A)#同上
np.median(A)
np.cumsum(A)#累加,返回1个12个元素的数组,数组中第k个元素是A的前k项和
np.diff(A)#相邻差,返回一个m*(n-1)维矩阵为[i,j]为A中的[i,j+1]-[i,j]
np.nonzero(A)#返回数组a中非零元素的索引值
#只有a中非零元素才会有索引值,那些零值元素没有索引值;
#返回的索引值数组是一个2维tuple数组,该tuple数组中包含一维的array数组。其中,一维array向量的个数与a的维数是一致的。
#索引值数组的每一个array均是从一个维度上来描述其索引值。比如,如果a是一个二维数组,则索引值数组有两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值。
np.sort(A)#也是矩阵,按行排序从小到大,axis=0可以按列排序
#上述运算同样可以加上axis,argmin,argmax如果按行索引的话会返回其所在行内的索引,而不是整体矩阵的索引
np.transpose(A)#转置
A.T#转置
np.clip(A,a_min,a_max,out=None)#给定一个最小值和最大值,小于a_min的数变为a_min,大于a_max的数变为a_max

4、numpy的索引

import numpy as np
A=np.arrange(3,15).reshape((3,4))
a=A[2]#结果是最后一行,array的索引与列表相同
A[2,3]#与A[2][3]相同
#array可以做矩阵切割
A[0:1,3:]#可以生成新的矩阵
#循环
for row in A:#迭代行
for col in A.T:#迭代列
for item in A.flat:#迭代A的每个元素
#A.flatten()返回一个一行序列,A.flat是其对应的迭代器

5、numpy的array合并

import numpy as np
A=np.array([1,1,1])
A.shape#返回(,3)
B=np.array([2,2,2])
np.vstack((A,B))#vertical stack上下合并,变成2*3的矩阵
np.hstack((A,B))#horizontal stack左右合并,返回[1,1,1,2,2,2]
A[:,np.newaixs]#在列数上加了一个维度返回[[1],[1],[1]],转置不能做到,还是一个序列
np.hstack(A[:,np.newaixs],B[:,np.newaixs])
#返回值是[[1 2][1 2][1 2]]
c=np=concatenate((A,B,B,A),axis=0)#多值合并,axis=0时是上下合并,=1时是左右合并,也是从行来操作

6、numpy的array分割

import numpy as np
A=np.arange(12).reshape((3,4))
np.split(A,2,axis=1)#返回值是
#[array([[0,1],[4,5],[8,9]]),array([[2,3],[6,7],[10,11]])],2代表分割层数,axis代表按行分割还是按列分割=1时按行分割,把行分成n段
np.split(A,3,axis=1)#报错,不能进行不等的分割
np.array_split(A,3,axis=1)#不等量分割2,1,1列
np.vsplit(A,3)#纵向分割,为axis=0的情况
np.hsplit(A,3)#横向分割

7、numpy的copy和deep copy

import numpy as np
a=np.arange(4)
b=a
c=a
d=b
#改变a的值,则b,c,d都跟着改变(b is a 返回True)
#同理改变b之后a,c,d都会被改变
e=a.copy()#深度copy,e与a不相互关联
#在python中list可以通过[:]进行deep copy 但是numpy中的array不可以,只能用copy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值