转载自:
python 科学计算学习一:numpy快速处理数据
numpy中的数组筛选条件
NumPy中array和matrix用于矩阵乘法时的区别
1
import numpy as np
>> a=np.array([1,2,3,4]) #列向量
>> a = np.array([[1,2,3,4]]) #行向量
2
>> b=np.array([1.2,2,2,3.1],dtype=np.int) #结果是array([1, 2, 2, 3])
>> type(b) #查看b的数据类型
<type 'numpy.ndarray'>
>> b.dtype #查看b里面的数据的类型
dtype('int64')
3
>> c=np.arange(0,1,0.2) #arange()相当于函数range(),指定开始值,终值,步长来创建一维数组,但注意不包括终值
array([ 0. , 0.2, 0.4, 0.6, 0.8])
>> d=np.linspace(1,9,10) #linspace()却要包括终值,指定开始值,终值,数据个数来创建一维数组
array([ 1. , 1.88888889, 2.77777778, 3.66666667, 4.55555556, 5.44444444, 6.33333333, 7.22222222, 8.11111111, 9. ]) # 将1到9之间均分为9份,10个数字
4
>>np.ones((2,3)) #还有zeros(),empty()都是按照指定形状生成数组,而empty里装的是分配的空间地址
array([[ 1., 1., 1.], [ 1., 1., 1.]])
5
>> np.random.rand(10) #生成数值为0~1的随机数组
6
>> e=np.arange(0,10,1)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>> e[3:7] #用a[3:7] 表示 a[3] 到a[6]的所有元素组成的数组,还能在其中加上步长,但都不包括最后一个元素
array([3, 4, 5, 6])
>> e[:-1]
array([0, 1, 2, 3, 4, 5, 6, 7, 8]) #含有负数就表示从后面开始
>> e[7:1:-1]
array([7, 6, 5, 4, 3, 2]) #若是步长为负数,表示倒序排列
7
>> a
array([[6, 7, 1, 6],
[1, 0, 2, 3],
[7, 8, 2, 1]])
>> np.sum(a)
44
>> np.sum(a,axis=0)
array([14, 15, 5, 10])
>> np.sum(a,axis=1)
array([20, 6, 18])
#与之类似的还有
#np.mean()
#np.var() 方差
#np.std() 标准差
8
>> x=np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>> np.where(x<5,9-x,x) #得到一个数组,满足:当x<5的时候它的元素为9-x,否则为x
array([9, 8, 7, 6, 5, 5, 6, 7, 8, 9])
>> np.select([x<2,x>6,True],[7-x,x,2*x]) #当x满足第一个条件时,执行7-x;当x满足第二个条件事执行x;当二者都不满足的时候执行2*x
array([ 7, 6, 4, 6, 8, 10, 12, 7, 8, 9])
>> np.piecewise(x, [x<2,x>6], [lambda x:7-x,lambda x:x,lambda x:2*x]) #以上两者比较耗内存,piecewise只在满足条件的时计算
array([ 7, 6, 4, 6, 8, 10, 12, 7, 8, 9])# x<2时,执行7-x;x>6时,执行x;else 执行2*x
9
- np.max()和np.min() 都有axis和out(输出)参数
- np.argmax(),和np.argmin()可以取得最大/小值的下标
- np.sort()可以排序,
- np.argsort()得到的是排序后的数据的原来位置的下标
10
>> b=np.random.randint(0,5,8)
array([2, 3, 3, 0, 1, 4, 2, 4])
>> np.unique(b) #unique()保留数组中不同的值
array([0, 1, 2, 3, 4])
>> c,s=np.unique(b,return_index=True)
>>> c
array([0, 1, 2, 3, 4]) # 精简后的数组
>>> s
array([3, 4, 0, 1, 5]) #精简后数组的元素的原来的位置索引
11
>> b
array([2, 3, 3, 0, 1, 4, 2, 4])
>> np.bincount(b) #对数组中各个元素出现的次数进行统计
array([1, 1, 2, 2, 2]) 分别是0 1 2 3 4的个数;
>> w=np.random.rand(8) #设定相应的权值
array([ 0.29529445, 0.4554129 , 0.69615963, 0.4766137 , 0.97929591, 0.46069939, 0.76476676, 0.74556715])
>> np.bincount(b,w) #权值之和,其实可以用这个特点来做特殊的运算
array([ 0.4766137 , 0.97929591, 1.06006121, 1.15157254, 1.20626654])
12
>> import numpy.ma as ma
>> b
array([2, 3, 3, 0, 1, 4, 2, 4])
>> mask=b<3 #掩码数组表示的是不完整的数据或含有无效值的数据
>> mx=ma.array(b,mask=mask)
>> mx
masked_array(data = [-- 3 3 -- -- 4 -- 4], mask = [ True False False True True False True False],fill_value = 999999)
13
>> a.repeat(6,axis=0) #将a按照第一轴的方向扩展6次得到的数组
# axis=0是按第一轴的方向(列方向)操作
# axis=1则是行方向,这也等价于axis=-1,因为-1表示的最后的轴的方向。所以就是行方向
14
>> data1 = np.arange(10)
>> data1
>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>> data2 = np.array([2,8,6,4])
>> np.intersect1d(data1,data2) #intersect1d可以求取两个数组集合的交集
>> array([2, 4, 6, 8])
15
>> np.union1d(data1,data2) #union1d可以对两个数组集合的并集计算
>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
16
>> np.in1d(data1,data2)
>> array([False, False, True, False, True, False, True, False, True, False], dtype=bool)
>> np.in1d(data2,data1)
>> array([ True, True, True, True], dtype=bool)
#通过in1d可以实现对第一个参数数组中的每个元素是否是第二个参数数组子集的判断,而最终通过判断返回的布尔数组即可判断两个参数数组的子集关系
17
>> np.setdiff1d(data1,data2)
>> array([0, 1, 3, 5, 7, 9])
>> np.setdiff1d(data2,data1)
>> array([], dtype=int32)
#setdiff1d可以求解出存在于第一个集合但是并不存在于第二个集合中的元素,返回值是一个数组集合
18
>> np.setxor1d(data1,data2)
>> array([0, 1, 3, 5, 7, 9])
>> np.setxor1d(data2,data1)
>> array([0, 1, 3, 5, 7, 9])
#setxor1d用于求解不同时存在于两个数组中的元素,并返回一个数组集合,两个参数的顺序变化不会改变求解的结果。返回的结果是是一个有序的数组序列。
19
- 在NumPy中,array用于表示通用的N维数组,matrix则特定用于线性代数计算。array和matrix都可以用来表示矩阵.
- 使用array时,运算符 * 用于计算数量积(点乘),函数 dot() 用于计算矢量积(叉乘).
- 使用matrix时,运算符 * 用于计算矢量积,函数 multiply() 用于计算数量积.