00numpy技巧
构造列表筛选功能
import numpy as np
a = np.array(range(6)).reshape(2,3)
mask = np.array([1,2])
print('原数组\n',a)
print('筛选数组',mask)
原数组
[[0 1 2]
[3 4 5]]
筛选数组 [1 2]
要求实现
筛选出原数组,第i行的第mask[i]个元素
- 循环实现
- 向量实现
# 1. 循环实现
b=[]
for idx,x in enumerate(mask):
b.append(a[idx,x])
np.array(b)
array([1, 5])
# 2. 向量实现
a[range(len(mask)),mask]
array([1, 5])
Numpy 一百题
以下为笔记
- 数组逆序
Z[::-1]:取自缩写 of Z[1:10:2] - 查找非0元素的下标 np.nonzero([1,2,3,0,3,0])
- 创建 3 * 3 的单位矩阵 np.eye(3)
- 创建 3 * 3 * 3 的随机数矩阵 np.random.random((3,3,3))
- 数组周围增加一个边界 np.pad(Z, pad_width=1, mode='constant', constant_values=0)
- print(0.3 == 3 * 0.1) # False
print(0 * np.nan) # np.nan
print(np.inf > np.nan) #False - numpy.diag(v, k=0): v 是 2d 则提取对角线元素,v是1d则构建对角矩阵 , k=1 表示主对角线上边一行,k=-1表示对角线下面一行
- 输出棋盘样式的矩阵
Z = np.ones((8,8),dtype='int') Z[:-1:2,0:-1:2] = 0 Z[1::2,1::2] = 0 print(Z) answer(19) -------------------------- [[0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0]] - 矩阵乘法(真矩阵相乘)
print(X.dot(Y)) print(X @ Y) - 有一种简写
np.array(range(10)) ---> np.arange(10) - numpy数组中筛选出 3 到 8 的数值
X[ (X>=3) & (X<=8)] - 有趣的题
print(sum(range(5),-1)) # 输出 9 这里-1 的意思是前面的和加上一个start值,此处start=-1 from numpy import * print(sum(range(5),-1)) # 输出 10 这里-1 的意思是默认对最低维度求和 - 四舍五入
Y = np.ceil(X) Z = np.floor(X) T = np.round(X) - 找两个数组的交集
np.intersect1d(Z1,Z2) - 获得日期的函数
yesterday = np.datetime64('today') - np.timedelta64(1) today = np.datetime64('today') tomorrow = np.datetime64('today') + np.timedelta64(1) - 创建一个5*5的矩阵,每一行都是0-4
X = np.zeros((5,5),dtype=int) Y = X + np.arange(5) <!-- ----------- --> X = np.arange(5) Y = np.tile(X,(5,1)) - 创建10个数线性分布在0-1之间,不包括0、1
Z = np.linspace(0,1,11,endpoint=False)[1:] - 随机从1-n个数中选m个
n , m = 25,5 np.random.choice(np.arange(1,n+1),m)#从1 ~ n+1随机选m个 np.random.choice(n,m) #从0~n随机选m个 - 随机从给定区间内抽数,保证等概率 np.random.uniform(a,b,c) 在区间[a,b)内等概率抽取c个,特殊情况下a=0,b=1时等价于random.random(c),想要整数可以使用np.random.randint
----------------------------------------------------------------------------------------------------------

浙公网安备 33010602011771号