numpy库学习

numpy 数据基础

array

构造方法:

可以用list创建

常见属性:

.dtype 查看元素类型

其他创建array的方法:
  • 零:全0
np.zeros(n)

np.zeros(shape=n, dtype=int)

np.zeros((x,y))
  • 一:全1
np.ones(n)
  • 填充:
np.full(shape, fill_value)

arange

  • 创建array序列:
np.arange(start, end, step=1)

【注】step可以传入浮点数

linspace

  • 创建array序列:
np.linspace(start, end, num)

start中截取num个点,start和end包括在内

random

  • 生成随机序列
np.random.randint(0, 10)	#生成一个随机数

np.random.randint(0, 10, size)	#生成一个随机序列,len=10
  • 指定随机种子:
np.random.seed(n)

每次生成同样的随机数

  • 浮点随机数:
np.random.random([size])
  • 生成符合正态分布的随机数: 均值为0,方差为1
np.random.normal()
np.random.normal(E=0,D=1)
np.random.normal(E=0,D=1,size)

【注】size参数是一个元组

查文档

  • 方法/模块+?:
np.random.normal?
  • help(方法): 在jupyter内部显示
help(np.random.normal)

Numpy 数组和矩阵的基本操作

属性:

.ndim:维度

.shape:形状

.size:元素个数

数据访问:

x[0][0] 不建议

x[(0, 0)], 简写为:x[0, 0]

切片: ⋆ ⋆ ⋆ \star\star\star

  • 常规:

[a:b][:b][a:]

[::2]:头到尾,步长2

  • 应用在多维数组:在不同维度取不同的切片

X[:2, :3] :两个维度取切片,前2行,前3列

【注】X[:3][:2]:先解析X[:3]取前3行,在解析[:3]:在前3行中取前2行

X[:2, ::2]:前2行,每行间隔2取

X[::-1, ::-1]:整体反转

X[0, :]:取第一行

X[:, 0]:取第一列

与list切片的区别:

list取切片,创建新的list副本,而numpy中赋值只是引用:

subx = X[:2, :3]

用.copy()产生副本

reshape

x.shape

new_x = x.reshape(x, y)	# 参数是元组
# 返回新的矩阵,但不改变x
  • 自动填充: -1
x.reshape(10, -1)	# 10行,每行自动填充,必须可以整除

矩阵 合并 与 分割

合并操作
np.concatenate([x, y])

np.concatenate([x, y], axis=1)	# 默认是0:第一个维度,即沿着行方向拼接

【注】只能处理维数一样的情况:

[[1, 2, 3], [4, 5, 6]] 和 [1, 2, 3]

可以通过reshape解决

  • 更好的解决方案:
np.vstack([A, x])	# 垂直方向堆叠

np.hstack([A, x])	# 水平方向

分割操作

np.split(l, [x, y])	# x, y 是分割点:切成3段

np.split(l, [x])	# 切成2段

二维矩阵:np.split(A, [x])	# 按行分割,默认axis=0,基于第一个维度

np.split(A, [x], axis=1)
np.vsplit(A. [x])	# 行(垂直)分割

np.hsplit(A. [x])	# 列(水平)分割
  • 应用:分割特征 (Feature) 矩阵 和 Label向量
x, y = np.hsplit(data, [-1])

y[:, 0] 得到向量

numpy中的矩阵运算

Universal Functions

numpy中支持: + - * / …等运算且做了优化(远优于list)

矩阵间的运算

+ - * /:对应元素间进行运算

A.dot(B):矩阵点乘

A.T:矩阵转置

向量和矩阵的运算

v + A:没意义,v和A每一行相加

+: 低纬相对于高纬运算

np.tile(v, (2, 1)) #堆叠:行上堆叠2次,列上堆叠1次

【注】.dot(v) 自动转换行列向量

矩阵的逆:
invA = np.linalg.inv(A)
  • 对于非方阵:伪逆
pinvx = np.linalg.pinv(x)

pinvx.dot(x)

聚合操作

np.sum(L)、np.min(L)、np.max(L)

也可以: L.min()

计算行和:

np.sum(X, axis=0)	# 沿着列(第0个维度)运算 -> 每行的 / 压缩掉第0个维度

乘积:np.prod(X)

均值:np.mean(X)

中位数:np.median(X)

位次:

np.percentile(bit_array, q=50)	# 求第50%位的数 = 中位数

通常:for percent in [0, 25, 50, 75, 100] 来观察数据

方差:np.var(big_array)

标准差:np.std(big_array)

【注】axis:维度参数(along with)

索引 arg

返回索引,而不是值:

np.argmin(x)

np.argmax(x)



np.sort(x)

np.sort(x, axis=1)

x.sort()	# 默认按行排序

x.sort(axis=1)	# 按列排序



np.argsort(x)	# 索引排序,范围递增序列对应的索引

np.partition(x. pivot)

np.argpartition(x, pivot)
Fancy Indexing
  • 索引列表:
ind = [3, 5, 8]

x[ind]	# 返回3,5,8组成的子向量
  • 特殊:二维索引
ind = np.array([[0, 2],
               	[1, 3]])	# 全是index
x[ind]
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
x[row, col]
# 返回array(x[0, 1], x[1, 2], x[2, 3])
  • 布尔索引:
x = np.arange(4)
col = [True, False, True, True]
x[col]

比较

x < 3
# 返回布尔数组/矩阵

统计:

np.sum(x < 3)

np.count_nonzero(x < 3)

np.any(x == 0)	# 是否有非零元素,有任意满足条件的都返回True

np.all(x >= 0)	# 所有元素都非负,返回True

【注】都有axis参数:沿着哪一维度来求

  • 结合布尔索引得到子矩阵:
x[x < 5]

x[x[:, -1] % 3 == 0, :]	# 抽取行:最后一个特征值可以被3整除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值