Numpy数组
1、 数据类型
(1) array模块
创建固定类型数组
Type code | C Type | Python Type |
---|---|---|
‘c’ | char | character |
‘b’ | signed char | int |
‘B’ | unsigned char | int |
‘h’ | signed short | int |
‘H’ | unsigned short | int |
‘f’ | float | loat |
array.array(‘type’,[])
可参考: python标准库-array 模块.
(2) numpy标准数据类型
(3) ndarray对象创建数组内置方法
使用dtype关键字设置数据类型
import numpy as np
np.array([ , , ,...](...,dtype = '')) #类型不匹配将会向上转换
#全零数组
np.zeros((a,b)(,dtype = ''))
#全一数组
np.ones((a,b)(,dtype = ''))
#浮点型数组
np.full((a,b),number)
#线性序列
np.arange(start,end(,step))
#均匀分配
np.linspace(start,end,number)
#random函数
#0~1均匀分布随机数
np.random.random((a,b))
#正态分布随机数
np.random.normal(mean,variance,(a,b))
#[start,end)区间内的随机整型数组
np.random.randint(start,end,(a,b))
#根据给定维度生成[0,1)之间的数据,包含0,不包含1,d为各维度长度
np.random.rand(d0,d1,…,dn)
#返回一个或一组样本,具有标准正态分布
np.random.randn(d0,d1,…,dn)
#生成[0,1)之间的浮点数
numpy.random.random_sample(size= )
numpy.random.random(size= )
numpy.random.ranf(size= )
numpy.random.sample(size= )
#从给定的一维数组x中生成随机数
#x为整数时,对应的一维数组为np.arange(a)
numpy.random.choice(x, size= , replace=True, p=None)
#对X进行重排序,如果X为多维数组,只沿第一条轴洗牌
numpy.random.shuffle(x)
numpy.random.permutation(x) #不改变x的顺序
#n*n单位矩阵
np.eye(n)
#由n个整型数组成的未初始化数组,值为任意值
np.empty(n)
#在指定的间隔内返回均匀间隔的数字
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
#endpoint = True 包含最后一个数字,retstep = True 返回步长
#默认操作 np.linespace(start , end , num = )
#设置随机数种子
#设置相同的seed,每次生成的随机数相同
#区别见链接
np.random.seed() #每次生成随机数前都要设置一遍,只要seed相同,随机数相同
np.random.RandomState() #伪随机数生成器
链接: numpy.random.seed()与numpy.random.RamdomState()的区别.
2、 基本数组操作
(1) 数组的属性
操作 | 含义 |
---|---|
x.ndim | 数组维度 |
x.shape | 数组每个维度的大小 |
x.size | 数组总大小 |
x.dtype | 数组的数据类型 |
x.itemsize | 每个元素字节大小 |
x.nbytes | 总字节大小 |
(2) 数组索引
维度 | 操作 | 语句 |
---|---|---|
一维数组 | 数值索引 | x[n],x[-n] |
多维数组 | 逗号分隔符 | x[a,b] |
注意:Numpy数组为固定类型
(3) 切片操作
x[start,end,step]
#前n个元素 : x[:n]
#多维数组 : 逗号分隔 :x[行,列]
注意:切片操作返回数据视图,非副本,子数组改变时原数组也会发生改变。若需要产生副本可在加上.copy(),如x[:3,:3].copy()。
(4) 数组变形
一般操作
.reshape((a,b))
newaxis关键字
#变形获得行向量:
x [np.newaxis , :]
#变形获得列向量:
x [ : ,np.newaxis]
(5) 数组拼接和分裂
拼接
- np.concatenate
np.concatenate ( [ x , y ( , …) ] )
#二维数组拼接
x = ( [ [1,2,3] , [4,5,6] ] )
#axis指定拼接位置
np.concatenate([x , x],axis = 0)#从第一个轴拼接 --> array = ([ [1,2,3] , [4,5,6], [1,2,3] , [4,5,6]])
np.concatenate([x , x],axis = 1)#从第二个轴拼接 --> array = ([ [1,2,3,1,2,3] , [4,5,6,4,5,6]])
- np.vstack 垂直栈拼接(沿第一维度拼接)
np.vstack( [ z , y ( , …) ] )
例:
x = np.array([1,2,3])
y = np.array([[4,5,6],[7,8,9]])
np.vastack([x,y]) --> arrary([[1,2,3],[4,5,6],[7,8,9]])
- np.hstack 水平栈拼接(沿第二维度拼接)
np.hstack([x , y ( ,… )])
例:
z = array([[1],[1]])
np.hstack([y,z]) --> array([[4,5,6,1],[7,8,9,1]])
- np.dstack 沿第三维度拼接
…
分裂
- np.split
np.split( x , [ n1,n2(,…)]) #x为传递参数,n 为分裂点,产生n+1个子数组
例:
x = [1,2,3,4,5,6,7,8,9]
x1,x2,x3 = np.split(x,[2,6])
—>
[1,2] [3,4,5,6] [7,8,9]
- np.hsplit 二维
- np.vsplit 三维
…
3、 函数
(1) 通用函数
- 通用函数
运算符 | 通用函数 |
---|---|
+ | np.add |
- | np.subtract |
-(负数运算) | np.negative |
* | np.multiply |
/ | np.divide |
// | n.floor_divide |
** | np.power |
% | np.mod |
绝对值:
np.bas(x)
三角函数:
np.sin(x)
np.cos(x)
np.tan(x)
np.arcsin(x)
np.arccos(x)
np.arctan(x)
指数
np.exp(x) #e^x
np.exp2(x) #2^x
np.power(3,x) #3^x
np.expm1(x) #exp(x) - 1
对数
np,log(x) #ln(x)
np.log2(x) #log2(x)
np.log1p(x) #log(1+x)
专用统计函数库 scipy
链接: SciPy.org.
- 通用函数特性
指定输出: out参数 ,可用于所有通用函数
例:
np.multiply(x, 10 ,out = y) --> y = x * 10
聚合:
reduce方法,对给定元素和操作重复执行,直到得到单个结果,对所有通用函数适用
例:
np.add.reduce(x) #返回数组所有元素的和
其它方法
np.min(x) / x.min()
np.max(x) / x.max()
np.sum(x) / x.sum()
注:可添加axis参数指定聚合轴
(2) 聚合函数
(3) 比较操作
** 返回布尔值 **
运算符 | 通用函数 |
---|---|
== | np.equal |
!= | np.not_equal |
< | np.less |
<= | np.less_equal |
> | np.greater |
>= | np.greater_equal |
布尔数组
1、布尔数组操作
(1) 统计True的个数
np.count_nonzero( )
np.sum( ) #此处将true解释为1,false解释为0
(2) 布尔运算符
& 、| 、^ 、~
运算符 | 通用函数 |
---|---|
& | np.bitwise_and |
| | np.bitwise_or |
^ | np.bitwise_xor |
~ | np.bitwise_not |
(3) 布尔掩码操作
#选取索引
例:
x = np.array([1,2,3,4,5,6,7])
x[x<3]
返回选出元素组成的一维数组
排序
import numpy as np
1、快速排序
(1) np.sort(x (, axis = ))
返回一个排好序的数组
#不改变原数组
#从小到大排序rag = np.random.RandomState(100)
x = rag.rand(10)
x
array([0.54340494, 0.27836939, 0.42451759, 0.84477613, 0.00471886,
0.12156912, 0.67074908, 0.82585276, 0.13670659, 0.57509333])np.sort(x)
array([0.00471886, 0.12156912, 0.13670659, 0.27836939, 0.42451759,
0.54340494, 0.57509333, 0.67074908, 0.82585276, 0.84477613])x
array([0.54340494, 0.27836939, 0.42451759, 0.84477613, 0.00471886,
0.12156912, 0.67074908, 0.82585276, 0.13670659, 0.57509333])
(2) np.argsort(x)
返回排序后索引值
print(np.argsort(x))
[4 5 8 1 2 0 9 6 7 3]
2、部分排序
(1) np.partition(x , N (, axis = ))
返回一个数组,该数组左侧N个值为数组x最小的的N个值,往右为剩余任意值
np.partition(x,3)
array([0.13670659, 0.12156912, 0.00471886, 0.27836939, 0.42451759,
0.54340494, 0.67074908, 0.82585276, 0.84477613, 0.57509333])
(2) np.argpartition(x , N (,axis = ))
类似np.argsort,返回分隔索引值