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. 循环实现
  2. 向量实现
# 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 一百题

以下为笔记

  1. 数组逆序 Z[::-1] :取自缩写 of Z[1:10:2]
  2. 查找非0元素的下标 np.nonzero([1,2,3,0,3,0])
  3. 创建 3 * 3 的单位矩阵 np.eye(3)
  4. 创建 3 * 3 * 3 的随机数矩阵 np.random.random((3,3,3))
  5. 数组周围增加一个边界 np.pad(Z, pad_width=1, mode='constant', constant_values=0)
  6. print(0.3 == 3 * 0.1) # False
    print(0 * np.nan) # np.nan
    print(np.inf > np.nan) #False
  7. numpy.diag(v, k=0): v 是 2d 则提取对角线元素,v是1d则构建对角矩阵 , k=1 表示主对角线上边一行,k=-1表示对角线下面一行
  8. 输出棋盘样式的矩阵
     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]]
    
  9. 矩阵乘法(真矩阵相乘)
    print(X.dot(Y))
    print(X @ Y)
    
  10. 有一种简写 np.array(range(10)) ---> np.arange(10)
  11. numpy数组中筛选出 3 到 8 的数值 X[ (X>=3) & (X<=8)]
  12. 有趣的题
    print(sum(range(5),-1)) # 输出 9   这里-1 的意思是前面的和加上一个start值,此处start=-1
    from numpy import *
    print(sum(range(5),-1)) # 输出 10  这里-1 的意思是默认对最低维度求和
    
  13. 四舍五入
    Y = np.ceil(X)
    Z = np.floor(X)
    T = np.round(X)
    
  14. 找两个数组的交集 np.intersect1d(Z1,Z2)
  15. 获得日期的函数
    yesterday = np.datetime64('today') - np.timedelta64(1)
    today     = np.datetime64('today')
    tomorrow  = np.datetime64('today') + np.timedelta64(1)
    
  16. 创建一个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))
    
  17. 创建10个数线性分布在0-1之间,不包括0、1 Z = np.linspace(0,1,11,endpoint=False)[1:]
  18. 随机从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个
    
  19. 随机从给定区间内抽数,保证等概率 np.random.uniform(a,b,c) 在区间[a,b)内等概率抽取c个,特殊情况下a=0,b=1时等价于random.random(c),想要整数可以使用np.random.randint
posted @ 2022-10-21 16:07  咿呀咿呀悠  阅读(29)  评论(0)    收藏  举报