精华内容
下载资源
问答
  • 前一篇文章说了如何用c语言读取CSV文件并保存为二维数组前一篇文章说了如何用c语言读取CSV文件并保存为二维数组\displaystyle 前一篇文章说了如何用c语言读取CSV文件并保存为二维数组,这一篇文章将会在将对得到二维...

    cCSV 前 一 篇 文 章 说 了 如 何 用 c 语 言 读 取 C S V 文 件 并 保 存 为 二 维 数 组 这一篇文章将会在将对得到二维数组根据某一个值进行划分操作

    CSV文件

    x1,x2,x3,x4,y
    3.6216,8.6661,-2.8073,-0.44699,0
    4.5459,8.1674,-2.4586,-1.4621,0
    3.866,-2.6383,1.9242,0.10645,0
    3.4566,9.5228,-4.0112,-3.5944,1
    0.32924,-4.4552,4.5718,-0.9888,1
    4.3684,9.6718,-3.9606,-3.1625,1

    x2=8.1674 x 2 = 8.1674 为界限,把二维数组划分为两部分,对于二维数组中的每一行来说 x2 x 2 的值大于 8.1674 8.1674 的存储在一个二维数组里面,小于 8.1674 8.1674 的每一行存储在一个二维数组里面

    思路很简单,就是利用循环来进行划分操作

    先来一个Python版本的伪代码,比较直观:

    def split(index, value, dataset):
        left, right = list(), list()
        for row in dataset:
            if row[index] < value:
                left.append(row)
            else:
                right.append(row)
        return left, right

    c语言里面没有 append() a p p e n d ( ) 操作,只能利用双重循环来进行赋值,并且我们要利用两个链表来记录所在行 x2 x 2 的值小于和大于 8.1674 8.1674 值所在行的行下标

    完整的c语言代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct node{
        int data;
        struct node *next;
    };//链表的定义 
    
    void get_two_dimension(char* line, double** data, char *filename);
    void print_two_dimension(double** data, int row, int col);
    int get_row(char *filename);
    int get_col(char *filename);
    int Gini(int** train_data, int* target);
    void split_data(double **data, int index, int value, int row, int col);
    
    int main()
    {
        char filename[] = "C:\\Users\\...\\...\\csvtest.csv";
        char line[1024];
        double **data;
        int row, col;
        int index = 1;
        double value = 8.1674;
        row = get_row(filename);
        col = get_col(filename);
        data = (double **)malloc(row * sizeof(int *));
        for (int i = 0; i < row; ++i){
            data[i] = (double *)malloc(col * sizeof(double));
        } 
        get_two_dimension(line, data, filename);
        printf("row = %d\n", row);
        printf("col = %d\n", col);
        split_data(data, index, value, row, col);
    }
    
    void get_two_dimension(char* line, double** data, char *filename)
    {
        FILE* stream = fopen(filename, "r");
        int i = 0;
        while (fgets(line, 1024, stream)) 
        {
            int j = 0;
            char *tok;
            char* tmp = strdup(line);
            for (tok = strtok(line, ","); tok && *tok; j++, tok = strtok(NULL, ",\n")){
                data[i][j] = atof(tok); 
            } 
            i++;
            free(tmp);
        }
        fclose(stream);
    }
    
    void print_two_dimension(double** data, int row, int col)
    {
        int i, j;
        for(i=1; i<row; i++){
            for(j=0; j<col; j++){
                printf("%f\t", data[i][j]);
            }
            printf("\n");
        }
    }
    
    int get_row(char *filename)
    {
        char line[1024];
        int i;
        FILE* stream = fopen(filename, "r");
        while(fgets(line, 1024, stream)){
            i++;
        }
        fclose(stream);
        return i;
    }
    
    int get_col(char *filename)
    {
        char line[1024];
        int i = 0;
        FILE* stream = fopen(filename, "r");
        fgets(line, 1024, stream);
        char* token = strtok(line, ",");
        while(token){
            token = strtok(NULL, ",");
            i++;
        }
        fclose(stream);
        return i;
    }
    
    void split_data(double **data, int index, int value, int row, int col)
    {
        node *left_node, *right_node;//left_node记录小于x2的行下标,right_node记录大于x2的行下标 
        left_node = (node *)malloc(sizeof(node));
        right_node = (node *)malloc(sizeof(node));
        left_node->next = NULL;
        right_node->next = NULL; 
        int count_left_size=0, i, count_right_size=0, j, k;
        for(i=1; i<row; i++){
            if(data[i][index] < value)
                count_left_size++;
            else
                count_right_size++;
        }//计算两个二维数组的长度 
        printf("left size = %d\n", count_left_size);
        printf("right size = %d\n", count_right_size);
        double left_array[count_left_size][col], right_array[count_right_size][col];
        for(i=1; i<row; i++){
            if(data[i][index] < value){
                node *p;
                p = (node *)malloc(sizeof(node));
                p->data = i;
                p->next = left_node->next;
                left_node->next = p;
            }//对所在行x2的值小于8.1674的行下标进行链接 
            else{
                node *q;
                q = (node *)malloc(sizeof(node));
                q->data = i;
                q->next = right_node->next;
                right_node->next = q;
            }//对所在行x2的值大于8.1674的行下标进行链接 
        }
        left_node = left_node->next;//链表的头部不存储行下标,往后移一位 
        right_node = right_node->next;//链表的头部不存储行下标,往后移一位 
        i = 0;
        while(left_node){
            for(j=0; j<col; j++){
                left_array[i][j] = data[left_node->data][j];
            }//赋值操作 
            left_node = left_node->next;
            i++;
        }
        i = 0;
        while(right_node){
            for(j=0; j<col; j++){
                right_array[i][j] = data[right_node->data][j];
            }//赋值操作 
            right_node = right_node->next;
            i++;
        }
    
        for(i=0; i<count_left_size; i++){
            printf("I'm left\n");
            for(j=0; j<col; j++){
                printf("%f\t", left_array[i][j]);
            }
            printf("\n");
        }
        for(i=0; i<count_right_size; i++){
            printf("I'm right\n");
            for(j=0; j<col; j++){
                printf("%f\t", right_array[i][j]);
            }
            printf("\n");
        }
    }

    运行结果

    row = 7
    col = 5
    left size = 2
    right size = 4
    I'm left
    0.329240        -4.455200       4.571800        -0.988800       1.000000
    I'm left
    3.866000        -2.638300       1.924200        0.106450        0.000000
    I'm right
    4.368400        9.671800        -3.960600       -3.162500       1.000000
    I'm right
    3.456600        9.522800        -4.011200       -3.594400       1.000000
    I'm right
    4.545900        8.167400        -2.458600       -1.462100       0.000000
    I'm right
    3.621600        8.666100        -2.807300       -0.446990       0.000000

    可以直观的感觉到Python代码是多么的简洁,不过在用c语言实现时用到了单链表,终于感觉单链表没白学了。

    展开全文
  • C++ new 二维数组 delete 二维数组

    千次阅读 2020-01-04 19:51:58
    //new 出一个y行x列的数组 //注意它的顺序 int x = 20; int y = 30; node** p = new svm_node*[y]; for (int i = 0;i < y;i++) p[i] = new svm_node[x]; //删除 for(int i=0;i<y;i++) delete [][i]; ...
    //new 出一个y行x列的数组
    //注意它的顺序
    int x = 20;
    int y = 30;
    
    node** p = new svm_node*[y];
    
    for (int i = 0;i < y;i++)
    	p[i] = new svm_node[x];
    
    
    
    //删除
    for(int i=0;i<y;i++)
        delete [][i];
    
    
    delete []p;

     

    展开全文
  • js二维数组转一维数组

    万次阅读 2016-12-31 16:26:46
    面试的一道题,将二维数组转换为一维数组 { const arr=[[1,2,3],[3,4],[5]]; console.log([].concat.apply([],arr)); }
    面试的一道题,将二维数组转换为一维数组 
    
    <script>
        {
            const arr=[[1,2,3],[3,4],[5]];
            console.log([].concat.apply([],arr));
        }
    </script>
    展开全文
  • 一、按数值排序var arr ...其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根据返回的值,如果返回的是大于0的数,那么就把数组中x放到y的后面,如果返回的是0则不变...

    一、按数值排序

    var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];

    arr.sort(function(x, y){

    return x[0] – y[0];

    });

    其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根据返回的值,

    如果返回的是大于0的数,那么就把数组中x放到y的后面,

    如果返回的是0则不变,

    如果小于0则将x放到y的前面,

    然后第一个排序好之后在进行下面两个的排序,直到整个数组排序完成。

    这是默认升序的比较函数,如果要降序排列则只需修改比较方式,改为 return y[0] – x[0] 即可,

    这里我们x[0]表示是按第一列进行排序,我们这里也可以按其他列进行排序。这里的排序默认就会修改arr的数组结构,所以排序完arr就是按第一列升序的数组了。

    二、按字符串排序

    var arr = [['中','国'], ['啊','的'], ['哦','的']];

    arr.sort(function(x, y){

    return x[0].localeCompare(y[0]);

    });

    localeCompare作用:用本地特定的顺序来比较两个字符串。

    localeCompare方法的使用规则是stringObject.localeCompare(target),

    如果

    stringObject 小于 target,则 localeCompare() 返回小于 0 的数,将x放到y的前面,

    如果 stringObject 大于

    target,则该方法返回大于 0 的数,就把数组中x放到y的后面,。

    如果两个字符串相等,或根据本地排序规则没有区别,该方法返回

    0,则不变,

    其比较使用的是本地的规则,本地规则意思就是使用操作系统底层对这些本地字符排序的规则进行排序,默认情况下比如使用大于号这样的比较只是纯粹比较两个字符的unicode的数大小,会与很多语言不符。

    结果就会按第一列中文字的拼音排序,如果含有英文的话,默认是将英文放在前面,如果是纯英文的话,会按字母顺序来,大写排在小写的后面,这样就可以实现字符串的排序了,包括中文和中英混排。至于要降序排列的话,方法与上面相同,改成return y[0].localeCompare(x[0]); 即可。

    JS二维数组排序组合

    需求是这样的:http://q.cnblogs.com/q/29093/ 这里简述一下: 现在有一个不确定长度的数组.比如:var temp=[["Fu","Hai&qu ...

    JS 二维数组排序

    JS:二维数组排序和获取子级元素

    JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...

    PHP array&lowbar;multisort&lpar;&rpar; 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

    一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

    php实现二维数组排序array&lowbar;multisort&lpar;&dollar;ages&comma; SORT&lowbar;DESC&comma; &dollar;home&rpar;函数

    1.sql查询排序参数是order by,那么php进行排序呢 可以参考array_multisrot函数 //php进行二维数组排序 -xzz1009 foreach($home as $home) ...

    PHP二维数组排序&lpar;list&lowbar;order&rpar;

    /** * 对二维数组进行排序 * 模拟 数据表记录按字段排序 * * * @list_order($list, $get['orderKey'], $get['orderT ...

    php基础篇-二维数组排序 array&lowbar;multisort

    原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...

    PHP二维数组排序&lpar;感谢滔哥&rpar;

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

    随机推荐

    Node&period;js开发利器

    开发工具 WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 做些小型项目用Sublime Text. Browserify:将你 ...

    LR java Vuser 相关依赖JAR包,配置文件处置方法

    JAR包,配置文件依赖有两种处理方法 1.放到工程文件夹下(lr脚本目录),不支持负载机调用 2.F4  classpath设置加载jar包和配置文件的整个文件夹,麻烦些,但支持负载机调用(与http ...

    appStore上传苹果应用程序软件发布流程(之前都是同事发,复制一份备用)

    首先确定帐号是否能发布, https://developer.apple.com/account,如果你打开Provisioning Portal,然后点击DisTribution看到的是下图中那样, ...

    cryptopp开源库的使用(一):md5加密

    项目总是各种新需求,最近遇到需要对字符串进行md5加密,确保传输字符串的有效性. 考虑到跨平台性和通用性,选择了cryptopp开源库,这里主要是用静态库调用. 1.引入头文件和lib库 #inclu ...

    C&num; 汉子增加UTF-8头

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Conv ...

    C&num;access数据库操作

    比较凌乱,有时间在整理吧. Provider=Microsoft.Jet.OLEDB.!" private void GetCon() { string strConnection=&quo ...

    数学&num;扩展欧几里德 POJ 1061&amp&semi;2115&amp&semi;2891

    寒假做的题了,先贴那时写的代码. POJ 1061 #include #include typedef long long LL; usin ...

    ssh连接原理介绍&lpar; 无密码连接登录的原理&rpar;

    SSH(Secure  Shell)一种在不安全网络上提供安全远程登录及其它安全网络服务的协议.由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x.(SSH 2.x的客户程序是不能 ...

    两个序列求前k大和

    ---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...

    How to add the ApplicationPoolIdentity to a SQL Server Login

    The ApplicationPoolIdentity is a virtual account in Windows that is dynamically generated when the a ...

    展开全文
  • 二维数组转一维数组

    2021-01-04 16:13:49
    $result = array_reduce($list, 'array_merge', array())
  • /** While openList is not empty */ while (this.openList.length) { //current node = node for open list with the lowest cost. currentTile = this.getTileWithLowestTotal(this.openList); //if the ...
  • 按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上我的提交:https://github.com/MJingv/baiduFE--jsproject/blob/master/task2.html1.二维数组的排序我们都知道...
  • 对象合并 const basicConfig = { width: 800, height:600, webPreferences: { nodeIntegration: true, // 可以使用node语法 }, }; const config = { width: 300, height:300, webPref...
  • js二维数组

    2015-09-21 21:22:21
    //二维数组 var gradeTable=[[80,90,90],[90,80,70],[100,60,90],[95,75,80]]; //二维数组对应的是甲乙丙的语数外三科成绩 alert(gradeTable.length); //4 alert(gradeTable[0][0]); //80 //计算每个人的三门...
  • PHP一维数组的排序可以...以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:function array_sort($arr,$keys,$type='asc'){$keysvalue = $new_array = array();foreach ($arr as $k=>$v){$k...
  • 二维数组

    2019-12-02 17:32:51
    java中使用 [][] 来定义二维数组,定义数组时也可同时初始化。 两种初始化形式: 格式1、动态初始化 数据类型 数组名 [ ][ ] = new 数据类型[m][n] 数据类型 [ ][ ] 数组名 = new 数据类型[m][n] 数据类型 [ ] 数组...
  • JavaScript将二维数组转为一维数组

    千次阅读 2020-09-06 23:37:30
    使用ES6的扩展运算符——“···”
  • <script> { const arr=[[1,2,3],[3,4],[5]]; console.log([].concat.apply([],arr)); } </script>
  • 给定二维数组,斜着打印出来 1,2,3,4​ 5,6,7,8​ 9,10,11,12​ ------​ 斜着打印二维数组 1,5,2,9,6,3,10,7,4,11,8,12​ 思路 第一种方法,利用广度优先遍历的思想,时间复杂度O(n),空间...
  • 根据二维数组创建二叉树Java 在LeetCode刷题的时候,遇到二叉树的题目,想要自己在Idea上调试,发现不回创建二叉树。查了资料后,记录一下,根据二维数组递归创建二叉树。 public TreeNode createBTree(int []array,...
  • 本篇文章主要是对js二维数组定义和初始化的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
  • 一维数组按照子数组元素个数进行切分并且整合成一个新的二维数组 1 function chunk(arr,size ) { 2 // 请把你的代码写在这里 3 var num = []; 4 for(var i=0;i<Math.ceil(arr.length/size);i++){ 5 ...
  • qsort对二维数组排序

    2021-02-27 11:11:04
    qsort对二维数组进行排序 1、对于malloc动态申请的多维数组(指针数组) 以一个例子解析: 打算操作一个数组,数组的每个元素是一个指针,指向2个元素的数组。元素的大小关系为先比较第一个元素,第一个元素相同比较...
  • 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 矩阵...
  • 二维数组返回问题

    2020-03-06 12:02:06
    #include<iostream> typedef unsigned long long int ...//二维数组名,作为返回值, //必须typedef重定义,否则编译出错 using namespace std; typedef struct node0{ lint a[2][2]; }node0; node0 f()...
  • var arrayHasElement = function(array, element) { // 判断二维数组array中是否存在一维数组element for (var el of array) { if (el.length === element.length) { for (var in...
  • 快速排序(二维数组

    千次阅读 2015-11-26 22:30:43
    会用qsort函数,但一直搞不清cmp返回值的作用,而且不会二维数组的排序,做poj1609的时候因为二维数组的快排WA了一个晚上,实在郁闷。下定决心彻底搞懂它,以后一点点的补充。qsort函数是编译器函数库自带的快速排序...
  • 快速创建空二维数组

    千次阅读 2017-10-26 13:54:04
    首先来看看Array怎么生成空数组,w3c里面的解释: 当调用构造函数时只传递...假设我们要创建一个8*10的二维数组。 var a=Array(8); for(var i=0;i;a++){ a[i]=Array(10); } console.log(a) 输出如下: 这样就
  • 二维数组和二级指针

    2013-09-25 17:04:05
    [转]二维数组和二级指针  入职一年了,这一年自己学到许多,但是忘记也很多,于是决定定下心来整理以前学到的,并且继续学习    二维数组和二级指针,这真是头疼的问题,困扰了我好几次,    先转一下...
  • 数组1:二维数组中的查找
  • 2.对于二维数组,是由一维数组构成,在发送二维数组时可拆分为一维数组. 发布者代码: #coding=utf-8 import time import rospy from std_msgs.msg import Float64MultiArray import numpy as np def Array_pub(): ...
  • 今天用JAVA模拟了一次保皇问题,真的是被恶心到了,但同时发现了...一、自定义类对象一维数组 在整理之前,先贴出一段代码: package ceshi; import java.util.*; import java.math.*; class node { public i...
  • 用qsort对二维数组进行排序

    万次阅读 2017-11-16 09:22:06
    对于malloc动态申请的多维数组(指针数组)以一个例子解析: 要求—— 打算操作一个数组,数组的每个元素是一个指针,指向2个元素的数组。...然后,针对每一个数组里的int *型指针,分配一个一维数组,数组类型为in
  • 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 下面是构建二叉查找树,然后搜索,...
  • POJ1609 二维数组快排+LIS

    千次阅读 2015-11-26 22:33:04
    lis倒不是问题,用n^2的就行了,但二维数组的快排搞了一个晚上,总是出错,最后还是先弄明白了二维数组的快排才AC的#include #include int ans[100000];struct node { int x,y; }; node a[10000];int cmp(const ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,315
精华内容 14,526
关键字:

node二维数组