精华内容
下载资源
问答
  • 实现 MySQL Top 函数【原创】

    千次阅读 2021-01-20 22:43:20
    如果是在SQL Server中,可以使用top,取前N条记录。但是在MySQL是不支持的。网上说的比较多的是用limit N,虽然可以取到前N条,但那是分组后的N条,不是每组N条数据,所以不符合需求,排除。还有一种是使用union把多...

    需求:查询数据,根据字段分组,取出分组后每组的前N条记录。

    如果是在SQL Server中,可以使用top,取前N条记录。但是在MySQL是不支持的。网上说的比较多的是用limit N,虽然可以取到前N条,但那是分组后的N条,不是每组N条数据,所以不符合需求,排除。还有一种是使用union把多个结果连接起来,这种方法需要提前知道有分多少组,而且不适合分组太多的场景,排除。

    我的实现思路:

    1.查出分组后的数据。

    2.使用原表数据和分组后的数据连接起来。

    3.按组生成序列(从0开始)。

    4.根据序列编号做为条件,找出前N条数据。

    SQL如下:

    按月分组

    SELECT

    tid, endDate

    FROM

    reportform.reportform_user_active AS rua

    GROUP BY DATE_FORMAT(endDate, '%y-%m');

    执行结果:

    2cb8ef416ea46b607bb74f4f66e6e1c4.png

    给分组后的数据加上序列,rowNum(从0开始)。

    SELECT

    rua.tid,

    rua.endDate,

    (@i:=IF(tmp.tid IS NULL, @i + 1, @i:=0)) AS rowNum

    FROM

    reportform.reportform_user_active AS rua

    LEFT JOIN (SELECT

    tid, endDate

    FROM

    reportform.reportform_user_active

    GROUP BY DATE_FORMAT(endDate, '%y-%m')) AS tmp ON tmp.tid = rua.tid, (SELECT @i:=0) AS i

    执行结果:

    7c91f5197867ad02134bc9335f27f682.png

    9df586492f73dc19eb42573bfaa9e5b3.png

    de560c1838ac92dd3df9dcd1f184d04f.png

    可以看到,每月开始生成序号,从0开始。

    最终SQL,取出前3条记录:

    SELECT

    *

    FROM

    (SELECT

    rua.tid,

    rua.endDate,

    (@i:=IF(tmp.tid IS NULL, @i + 1, @i:=0)) AS rowNum

    FROM

    reportform.reportform_user_active AS rua

    LEFT JOIN (SELECT

    tid, endDate

    FROM

    reportform.reportform_user_active

    GROUP BY DATE_FORMAT(endDate, '%y-%m')) AS tmp ON tmp.tid = rua.tid, (SELECT @i:=0) AS i) AS t

    WHERE

    t.rowNum < 3;

    执行结果:

    0258495698114b38ff3ff976afa185a8.png

    提示:如果数据库是Oracle或SQL Server,可以用ROW_NUMBER函数生成序列。

    展开全文
  • torch.topk()函数快速理解

    千次阅读 热门讨论 2021-08-23 22:05:22
    函数作用: 该函数的作用即按字面意思理解,topk:取数组的前k个元素进行排序。 通常该函数返回2个值,第一个值为排序的数组,第二个值为该数组中获取到的元素在原数组中的位置标号。 举个栗子: import numpy as ...

    函数作用:

    在这里插入图片描述
    在这里插入图片描述

    该函数的作用即按字面意思理解,topk:取数组的前k个元素进行排序。

    通常该函数返回2个值,第一个值为排序的数组,第二个值为该数组中获取到的元素在原数组中的位置标号。


    举个栗子:

    import numpy as np
    import torch
    import torch.utils.data.dataset as Dataset
    from torch.utils.data import Dataset,DataLoader
    
    ####################准备一个数组#########################
    tensor1=torch.tensor([[10,1,2,1,1,1,1,1,1,1,10],
                 [3,4,5,1,1,1,1,1,1,1,1],
                 [7,8,9,1,1,1,1,1,1,1,1],
                 [1,4,7,1,1,1,1,1,1,1,1]],dtype=torch.float32)
    
    ####################打印这个原数组#########################
    print('tensor1:')
    print(tensor1)
    
    #################使用torch.topk()这个函数##################
    print('使用torch.topk()这个函数得到:')
    
    '''k=3代表从原数组中取得3个元素,dim=1表示从原数组中的第一维获取元素
    (在本例中是分别从[10,1,2,1,1,1,1,1,1,1,10]、[3,4,5,1,1,1,1,1,1,1,1]、
      [7,8,9,1,1,1,1,1,1,1,1]、[1,4,7,1,1,1,1,1,1,1,1]这四个数组中获取3个元素)
    其中largest=True表示从大到小取元素'''
    print(torch.topk(tensor1, k=3, dim=1, largest=True))
    
    
    #################打印这个函数第一个返回值####################
    print('函数第一个返回值topk[0]如下')
    print(torch.topk(tensor1, k=3, dim=1, largest=True)[0])
    
    #################打印这个函数第二个返回值####################
    print('函数第二个返回值topk[1]如下')
    print(torch.topk(tensor1, k=3, dim=1, largest=True)[1])
    '''
    
    #######################运行结果##########################
    tensor1:
    tensor([[10.,  1.,  2.,  1.,  1.,  1.,  1.,  1.,  1.,  1., 10.],
            [ 3.,  4.,  5.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
            [ 7.,  8.,  9.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
            [ 1.,  4.,  7.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]])
    
    使用torch.topk()这个函数得到:
    
    '得到的values是原数组dim=1的四组从大到小的三个元素值;
    得到的indices是获取到的元素值在原数组dim=1中的位置。'
    
    
    torch.return_types.topk(
    values=tensor([[10., 10.,  2.],
            [ 5.,  4.,  3.],
            [ 9.,  8.,  7.],
            [ 7.,  4.,  1.]]),
    indices=tensor([[ 0, 10,  2],
            [ 2,  1,  0],
            [ 2,  1,  0],
            [ 2,  1,  0]]))
    
    函数第一个返回值topk[0]如下
    tensor([[10., 10.,  2.],
            [ 5.,  4.,  3.],
            [ 9.,  8.,  7.],
            [ 7.,  4.,  1.]])
            
    函数第二个返回值topk[1]如下
    tensor([[ 0, 10,  2],
            [ 2,  1,  0],
            [ 2,  1,  0],
            [ 2,  1,  0]])
    '''
    
    

    该函数功能经常用来获取张量或者数组中最大或者最小的元素以及索引位置,是一个经常用到的基本函数。

    展开全文
  • 当前位置:我的异常网» C语言»C数据结构, Status GetTop(SqStack S,SElemType &...e)函数,S.top-1与S.top-为啥S.top-不行www.myexceptions.net网友分享于:2013-11-13浏览:42次C数据结构, Status ...

    当前位置:我的异常网» C语言 » C数据结构, Status GetTop(SqStack S,SElemType &a

    C数据结构, Status GetTop(SqStack S,SElemType &e)函数,S.top-1与S.top-为啥S.top-不行

    www.myexceptions.net  网友分享于:2013-11-13  浏览:42次

    C数据结构, Status GetTop(SqStack S,SElemType &e)函数,S.top-1与S.top--?为什么S.top--不行?

    是不是e=*(S.top--)运算顺序问题?刚才试了一下,e=*(--S.top)就可以了

    #include

    #include

    #define OK 1

    #define ERROR 0

    #define STACK_INIT_SIZE 100 // 存储空间初始分配量

    #define STACKINCREMENT 10 // 存储空间分配增量

    typedef int SElemType; // 定义栈元素类型

    typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等

    struct SqStack

    {

    SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL

    SElemType *top; // 栈顶指针

    int stacksize; // 当前已分配的存储空间,以元素为单位

    }; // 顺序栈

    Status InitStack(SqStack &S)

    {

    S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(struct SqStack));

    S.top=S.base;

    S.stacksize=0;

    return OK;

    // 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE

    // 请补全代码

    }

    Status Push(SqStack &S,SElemType e)

    {

    int *newbase;

    if(S.stacksize>=STACK_INIT_SIZE)

    {

    newbase=(int *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(struct SqStack));

    S.base=newbase;

    }

    S.base[S.stacksize]=e;

    S.stacksize++;

    S.top++;

    return OK;

    // 在栈S中插入元素e为新的栈顶元素

    // 请补全代码

    }

    Status Pop(SqStack &S,SElemType &e)

    {

    if(S.top==S.base)

    return ERROR;

    else

    {

    e=*(S.top-1);///e=S.base[S.stacksize];????????????????????????????????????//

    S.top--;

    S.stacksize--;free()caozuobudong

    }

    // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

    // 请补全代码

    }

    Status GetTop(SqStack S,SElemType &e)

    {

    if(S.top==S.base)

    return ERROR;

    else

    {

    e=*(S.top-1);//S.top--???????????????????????????????????????????????????????

    }

    return OK;

    // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR

    // 请补全代码

    }

    int StackLength(SqStack S)

    {

    return S.stacksize;

    // 返回栈S的元素个数

    // 请补全代码

    }

    Status StackTraverse(SqStack S)

    {

    // 从栈顶到栈底依次输出栈中的每个元素

    SElemType *p=(SElemType *)malloc(sizeof(SElemType));

    p=S.top; //请填空

    if(p==S.base)printf("The Stack is Empty!"); //请填空

    else

    {

    printf("The Stack is: ");

    p--;

    while(p>=S.base) //请填空

    {

    printf("%d ", *p);

    p--; //请填空

    }

    }

    printf("\n");

    return OK;

    }

    int main()

    {

    int a;

    SqStack S;

    SElemType x, e;

    if(InitStack(S)) // 判断顺序表是否创建成功,请填空

    {

    printf("A Stack Has Created.\n");

    }

    while(1)

    {

    printf("1:Push \n2:Pop \n3:Get the Top \n4:Return the Length of the Stack\n5:Load the Stack\n0:Exit\nPlease choose:\n");

    scanf("%d",&a);

    switch(a)

    {

    case 1: scanf("%d", &x);

    if(!Push(S,x)) printf("Push Error!\n"); // 判断Push是否合法,请填空

    else printf("The Element %d is Successfully Pushed!\n", x);

    break;

    case 2: if(!Pop(S,e)) printf("Pop Error!\n"); // 判断Pop是否合法,请填空

    else printf("The Element %d is Successfully Poped!\n", e);

    break;

    case 3: if(!GetTop(S,e))printf("Get Top Error!\n"); // 判断Get Top是否合法,请填空

    else printf("The Top Element is %d!\n",e);

    break;

    case 4: printf("The Length of the Stack is %d!\n",StackLength(S)); //请填空

    break;

    case 5:StackTraverse(S); //请填空

    break;

    case 0: return 1;

    }

    }

    }

    ------解决方案--------------------

    文章评论

    展开全文
  • topk函数的详细解释

    2021-01-15 16:32:20
    本文主要是torch_geometric库中的topk函数的代码进行解释,该函数的在库中的路径为 torch_geometric.nn.pool,topk_pool.topk。在torch_geometric的文档中并没有有关于该函数的任何记录,可能是因为该函数属于比较...

    本文主要是torch_geometric库中的topk函数的代码进行解释,该函数的在库中的路径为 torch_geometric.nn.pool,topk_pool.topk。在torch_geometric的文档中并没有有关于该函数的任何记录,可能是因为该函数属于比较底层的操作。但是在某些情况下,我们可能不得不去了解底层函数的执行过程来更好地帮助我解决实际问题,或者构造属于自己的module。
    函数输入:x:节点的得分,ratio:保留节点的比例,batch:图分配向量
    函数输出:perm:保留的节点编码
    函数功能:保留每张子图中得分最高的ratio%的节点

    '''对topk函数的解析'''
    def topk(x, ratio, batch, min_score=None, tol=1e-7):
        if min_score is not None:
            # Make sure that we do not drop all nodes in a graph.
            scores_max = scatter_max(x, batch)[0][batch] - tol
            scores_min = scores_max.clamp(max=min_score)
    
            perm = (x > scores_min).nonzero(as_tuple=False).view(-1)
        else:
            # 向量中每一个元素表示了子图中节点的个数
            num_nodes = scatter_add(batch.new_ones(x.size(0)), batch, dim=0)
            batch_size, max_num_nodes = num_nodes.size(0), num_nodes.max().item()
            # 节点累积向量,第k个元素表示了前k-1个子图的总节点数
            cum_num_nodes = torch.cat(
                [num_nodes.new_zeros(1),
                 num_nodes.cumsum(dim=0)[:-1]], dim=0)
    
            index = torch.arange(batch.size(0), dtype=torch.long, device=x.device)
            # 统一每一张子图中的节点数,并将其节点编码映射到相应的编码空间中
            index = (index - cum_num_nodes[batch]) + (batch * max_num_nodes)
    
            dense_x = x.new_full((batch_size * max_num_nodes, ),
                                 torch.finfo(x.dtype).min)
            dense_x[index] = x
            dense_x = dense_x.view(batch_size, max_num_nodes)
            # 对每张子图中节点的分数,按照降序排序
            _, perm = dense_x.sort(dim=-1, descending=True)
            """
            将每张子图中的节点编码映射回最开始的编码空间中,在向量中可能存在相同的编码。
            这是因为两个向量出现在不同的子图中,不影响选取每张子图得分最高的前k个节点。
            """
            perm = perm + cum_num_nodes.view(-1, 1)
            perm = perm.view(-1)
            # 选取每张子图的前k个节点
            k = (ratio * num_nodes.to(torch.float)).ceil().to(torch.long)
            mask = [
                torch.arange(k[i], dtype=torch.long, device=x.device) +
                i * max_num_nodes for i in range(batch_size)
            ]
            mask = torch.cat(mask, dim=0)
            # 掩码操作,perm保存了最终保留的节点的编码
            perm = perm[mask]
    
        return perm
    
    展开全文
  • 因此,如果您不想冻结GUI,但不知道执行需要多长时间,您可以在一个单独的线程中执行函数,并使用after定期检查函数是否完成:import Tkinter as tk import time import multiprocessing def function(): time.sleep...
  • SQL窗口函数 这类问题其实就是常见的:每组最大的N条记录(topN)。 问题:查找每个学生成绩最高的2个科目
  • MySQL 8.0 窗口函数 排名、topN问题之前自己一直在用mysql5.7,没想到在8.0中加入了一个非常好用的功能---窗口函数,在这里将窗口函数、及其用法、可以解决的问题总结如下what窗口函数 --- 又名OLAP函数 --- Online ...
  • 目的:获取栈顶元素的值并弹出 原始错误代码 stack<int> s; int a = s.pop(); 代码会报错:error C2440: “初始化”: 无法从“void”转换为“int” 分析 top()是取栈顶元素... 作用是获取栈顶元素的值,并将其弹出栈。
  • torch.topk 函数详解1. 作用2. 使用方法3. 实例演示 1. 作用 取一个tensor的topk元素(降序后的前k个大小的元素值及索引) 2. 使用方法 dim=0表示按照列求 topn dim=1表示按照行求 topn 默认情况下,dim=1 3. 实例...
  • 函数介绍a.topk()求a中的最大值或最小值,返回两个值,一个是a中的值(最大或最小),一个是这个值的索引。代码示例>>> import torch>>> a=torch.randn((3,5))>>> atensor([[-0.4790, -0....
  • PyTorch中topk函数的用法详解发布时间:2020-08-20 00:32:33来源:脚本之家阅读:121听名字就知道这个函数是用来求tensor中某个dim的前k大或者前k小的值以及对应的index。用法torch.topk(input, k, dim=None, ...
  • 摘要:下文讲述Python中os.walk函数的功能说明,如下所示;os.walk()函数的功能:用于在目录树中 向上或向下移动,...os.walk()函数的语法格式:os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])--...
  • plot是实际使用的绘图函数,类似的函数还有hist等,plot操作遵守就近原则,即作用在最近一次使用的图形区上。 官网:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html 到此这篇关于matplotlib常见函数之...
  • 三角函数在python和numpy中实现的不够全面,主要包括cos, cosh, sin sinh, tan, tanh三角函数和arccos, arccosh, arcsin, arcs...
  • Hive TOP N 实现方法

    2021-01-12 16:32:10
    1).Hive中Select Top N的实现 Hive中使用Order by + Limit可以很容易地实现Select Top N。 hive默认的order by实现只会用1个reduce做全局排序,这在数据量大的时候job运行效率非常低。hive在0.12版本引入了...
  • R语言dplyr包的top_n函数返回dataframe或tibble的前N行数据、dplyr包的top_frac函数返回dataframe或tibble的前百分之N(N%)的数据
  • prometheus grafana sql 常用函数参数

    千次阅读 2021-05-15 14:13:36
    1. sum(..) by(instance) (increase()) 以instance分组然后相加 2. sum(..) without(instance) 去除instance,以剩下的标签分组然后相加 ...3. increase(..[1m]) 一分钟内的值 ...6. topk(3,.....
  • perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。Perf List利用perf剖析程序性能时,需要指定当前测试的性能时间。性能事件是指在处理器或操作系统中发生的,可能影响到程序性能的硬件事件或...
  • random函数

    2021-04-21 22:53:09
    手机评站网今天精心准备的是《random函数》,下面是详解!random函数的用法是turbopascal中的函数,希望有具体的介绍(有程序最好)...是turbo pascal 中的函数,希望有具体的介绍(有程序最好)用法:1、随机生成(0,1)...
  • matplotlib常用函数介绍 1、模块: from matplotlib import animation from matplotlib import pyplot from pylab import mpl from matplotlib import ticker 2、创建子图,定义 fig, ax fig,ax=plt....
  • 各个数据库中top 的表示方法

    千次阅读 2021-02-01 11:49:21
    Select Top在不同数据库中的使用用法:1. Oracle数据库SELECT * FROM TABLE1 WHERE ROWNUM<=N2. Infomix数据库SELECT FIRST N * FROM TABLE13. DB2数据库SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ...
  • CEILING函数是将参数Number向上舍入(正向无穷大的方向)为最接近的significance的倍数。例如,如果您不愿意使用像“分”这样的零钱,而所要购买的商品价格为$4.42,可以用公式=CEILING(4.42,0.1)将价格向上舍入为以...
  • Mysql中的窗口函数

    2021-01-18 19:12:01
    窗口函数初识窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行实时...窗口函数进阶mysql 8.0 之后的版本开始支持窗口函数的功能,窗口函数一般用于实现排名和Top N的问题,下面...
  • 语法:IIf(expr, truepart, falsepart) IIf 函数的语法含有下面这些命名参数:描述 :expr 必要参数。用来判断真伪的表达式。truepart 必要参数。如果 expr 为 True,则返回这部.+M1THISFORM.REFRESH其中的iif函数是...
  • mysql top的用法是什么

    2021-02-06 13:14:20
    下载employees测试数据库文件官网下载:employees官网下载2.Ubuntu环境安 2021-01-14 18:48:22 今天我们来看看Redis.conf的配置项都有什么作用,想用好一个工具,配置内容是基础。daemonize no Redis默认不是以守护...
  • 矩形函数的定义: 矩形函数 rect(t); 如果绝对值 |t| > 0.5 rect(t) = 0; 如果绝对值 |t| = 0.5 rect(t) = 0.5; 如果绝对值 |t| < 0.5 rect(t) = 1.0;也可以用单位阶跃函数 u(t) 来定义: rect(t/T) = u(t + T/...
  • sample函数相较于beam_search函数要简单的多,但是需要注意的一点是,sample需要搭配logits_warper处理器列表使用,相应的处理器函数在下面。sample函数的源码解释如下,比较浅显易懂。 # auto-regressive ...
  • Dataframe:one twoa 1 xb 1 yc 2 yd 2 ze 3 zgrp = DataFrame.groupby('one')grp.agg(lambda x: ???) #or equivalent functionDesired output from grp.agg:one two1 x|y2 y|z3 zMy agg function be...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 564,426
精华内容 225,770
关键字:

top函数作用