Numpy学习笔记

Numpy数组

1、 数据类型

(1) array模块

创建固定类型数组

Type codeC TypePython Type
‘c’charcharacter
‘b’signed charint
‘B’unsigned charint
‘h’signed shortint
‘H’unsigned shortint
‘f’floatloat

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) 数组拼接和分裂

拼接

  1. 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]])

  1. 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]])

  1. np.hstack 水平栈拼接(沿第二维度拼接)

np.hstack([x , y ( ,… )])
例:
z = array([[1],[1]])
np.hstack([y,z]) --> array([[4,5,6,1],[7,8,9,1]])

  1. np.dstack 沿第三维度拼接

分裂

  1. 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]

  1. np.hsplit 二维
  2. np.vsplit 三维

3、 函数

(1) 通用函数
  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.

  1. 通用函数特性

指定输出: 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,返回分隔索引值

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值