快速查找二维数组的所有峰值,c语言实现最好,python也可以,最好能实现滤波。

Python035

快速查找二维数组的所有峰值,c语言实现最好,python也可以,最好能实现滤波。,第1张

#include<stdio.h>

#include <stdlib.h>

#include <limits.h>

#include<malloc.h>

#define maxsize 6 //每个波形数据最大采集个数  默认6

typedef struct array1

{

    int *data

    struct array1 *next

}ARR1

ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据节点 返回尾节点

int findMaxF(ARR1 *arrHead)//查找最大峰值

int removeMinF(ARR1 *arrHead)//移除最小峰值数据组   返回最小峰值

void printfArr(ARR1 *arrHead)//打印数据链表

int main()

{

    ARR1 *arrHead=(ARR1 *)malloc(sizeof(ARR1))

    arrHead->next=NULL

    ARR1 *arrTail=NULL

    arrTail=addNewArr(arrHead,arrTail)//想插入几组,就调用几次  我就测试6组

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    printf("采集的原数据组为:\n")

    printfArr(arrHead)

    printf("最大峰值:%d,最小峰值值:%d\n",findMaxF(arrHead),removeMinF(arrHead))

    printf("删除最小峰值数据组后的数据为:\n")

    printfArr(arrHead)

    return 0

}

void printfArr(ARR1 *arrHead)//打印数据链表

{

    while(arrHead->next!=NULL)

    {

        printf("%d,%d,%d,%d,%d,%d\n",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5])

        arrHead=arrHead->next

    }

}

ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据   返回尾节点

{

    int *data=(int *)malloc(sizeof(int)*maxsize),i

    printf("采集一组波形数据(最大采集个数%d):",maxsize)

    for(i=0i<maxsizei++)

        scanf("%d",&data[i])

    ARR1 *arrNew=(ARR1 *)malloc(sizeof(ARR1))

    arrNew->data=data

    arrNew->next=NULL

    if(arrHead->next==NULL)//插入第一组数组 作为首节点

        arrHead->next=arrNew

    else

        arrTail->next=arrNew

    arrTail=arrNew

    return arrTail

}

int findMaxF(ARR1 *arrHead)//查找最大峰值

{

    int i,maxNum=0,maxf=0

    while(arrHead->next!=NULL)

    {

        maxNum=0

        for(i=0i<maxsizei++)//获取每组数据的峰值

        {

            if(arrHead->next->data[i]>maxNum)

                maxNum=arrHead->next->data[i]

        }

        if(maxNum>maxf)//获取最大峰值

            maxf=maxNum

        arrHead=arrHead->next

    }

    return maxf

}

int removeMinF(ARR1 *arrHead)//移除最小峰值数据组   返回最小峰值

{

    int i,maxNum=0,minf=INT_MAX

    ARR1 *minDataSave=NULL,*arrHeadSave=arrHead

    while(arrHead->next!=NULL)

    {

        maxNum=0

        for(i=0i<maxsizei++)//获取每组数据的峰值

        {

            if(arrHead->next->data[i]>maxNum)

                maxNum=arrHead->next->data[i]

        }

        if(maxNum<minf)//获取最小峰值

        {

            minDataSave=arrHead->next

            minf=maxNum

        }

        arrHead=arrHead->next

    }

    arrHead=arrHeadSave

    //移除最小峰值数据组

    while(arrHead->next!=NULL)

    {

        if(arrHead->next==minDataSave)//删除节点重组链表

        {

            arrHead->next=minDataSave->next

            minDataSave->next=NULL

            free(minDataSave->data)//释放节点内存

            free(minDataSave)

            break

        }

        arrHead=arrHead->next

    }

    return minf

}

a = [x,x,x,x,x,x,x]

h = []

l = []

for i in range(1, len(a)-1):

if(a[i-1] < a[i] and a[i+1] < a[i]):

h.append(a[i])

elif(a[i-1] > a[i] and a[i+1] > a[i]):

l.append(a[i])

if(len(h) == 0):

h.append(max(a))

if(len(l) == 0):

l.append(min(a[a.index(max(a)):]))

print h

print l

本文是《数据蛙三个月强化课》的第二篇总结教程,如果想要了解 数据蛙社群 ,可以阅读 给DataFrog社群同学的学习建议 。温馨提示:如果您已经熟悉python可视化内容,大可不必再看这篇文章,或是之挑选部分文章

对于我们数据分析师来说,不仅要自己明白数据背后的含义,而且还要给老板更直观的展示数据的意义。所以,对于这项不可缺少的技能,让我们来一起学习下吧。

画图之前,我们先导入包和生成数据集

我们先看下所用的数据集

折线图是我们观察趋势常用的图形,可以看出数据随着某个变量的变化趋势,默认情况下参数 kind="line" 表示图的类型为折线图。

对于分类数据这种离散数据,需要查看数据是如何在各个类别之间分布的,这时候就可以使用柱状图。我们为每个类别画出一个柱子。此时,可以将参数 kind 设置为 bar 。

条形图就是将竖直的柱状图翻转90度得到的图形。与柱状图一样,条形图也可以有一组或多种多组数据。

水平条形图在类别名称很长的时候非常方便,因为文字是从左到右书写的,与大多数用户的阅读顺序一致,这使得我们的图形容易阅读。而柱状图在类别名称很长的时候是没有办法很好的展示的。

直方图是柱形图的特殊形式,当我们想要看数据集的分布情况时,选择直方图。直方图的变量划分至不同的范围,然后在不同的范围中统计计数。在直方图中,柱子之间的连续的,连续的柱子暗示数值上的连续。

箱线图用来展示数据集的描述统计信息,也就是[四分位数],线的上下两端表示某组数据的最大值和最小值。箱子的上下两端表示这组数据中排在前25%位置和75%位置的数值。箱中间的横线表示中位数。此时可以将参数 kind 设置为 box。

如果想要画出散点图,可以将参数 kind 设置为 scatter,同时需要指定 x 和 y。通过散点图可以探索变量之间的关系。

饼图是用面积表示一组数据的占比,此时可以将参数 kind 设置为 pie。

我们刚开始学习的同学,最基本应该明白什么数据应该用什么图形来展示,同学们来一起总结吧。