| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3047 人关注过本帖
标题:各位大哥如何创建一个超大的二维数组,并将数据储存进去,转置再读取出来?
只看楼主 加入收藏
校草
Rank: 1
等 级:新手上路
帖 子:50
专家分:7
注 册:2017-3-15
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:7 
各位大哥如何创建一个超大的二维数组,并将数据储存进去,转置再读取出来?
没用过直接定义数组以外的其他定义方式,之前大一点的用Static可以解决,现在这个数组实在太大了。。在网上照猫画虎的,也不知道怎么修改,还请各位指教
贴出部分代码,为了测试改成了一个5*3的数组,原来是一个33600*27375的数组,
printf("%3.2f\n", arr[i][j]),打印的全是0.00
程序代码:
//======================================================
//将oringin文件进行转置,最后输出的a矩阵
//
//======================================================
//基本数据
const int HANG =5;//33600行(总网格数)!!修改
const int LIE = 3;// 27375列(总天数,也就是数据量)!!修改
//=====================================================
//基本数据!!!!!修改


const int yrolls = 3;//列数
const int xrolls = 5; //行数


int main(){
//======================================================
//文件操作
FILE* out, *in;
in = fopen("F:\\2017C\\5X3.asc", "r");//输!入!!!修改
out = fopen("F:\\2017C\\3x5.asc", "w");//输出!!修改

//创建大型二维arr矩阵
const int M = HANG, N = LIE;//M行N列(每一行有27375个数据)

int**  arr = (int **)malloc(sizeof(int *)*M);

for (int i = 0; i<M; i++)

    arr[i] = (int *)malloc(sizeof(int)* N);

//读入数据
while (!feof(in))
{

    for (int i = 0; i < HANG; i++){   //i<行数 210行*160列
        for (int j = 0; j < LIE; j++){   //j<列数 75年*365天
            fscanf(in, "%f", &arr[i][j]);
            printf("%3.2f\n", arr[i][j]);
        }
    }
}
for (int i = 0; i<M; i++)

    free(arr[i]);

free(arr);



[此贴子已经被作者于2017-12-15 14:58编辑过]

搜索更多相关主题的帖子: 数据 数组 修改 int const 
2017-12-15 14:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
你这代码怎么用%f读int?

float[33600][27375] 大约 3.5G
要么换个大内存的机器(现在的机器一般16G内存,应该是够用了)
要么就别全部读到内存中(比如,建立一个float[33600][27375]大小的二进制文件tmp.bin,从5X3.asc中读入数据时就直接写到tmp.bin的指定位置;最后再将tmp.bin转化为文本文件3x5.asc)
2017-12-15 15:54
校草
Rank: 1
等 级:新手上路
帖 子:50
专家分:7
注 册:2017-3-15
收藏
得分:0 
回复 2楼 rjsp
是不是应该改成:
float**  arr = (int **)malloc(sizeof(int *)*M);

for (int i = 0; i<M; i++)

    arr[i] = (int *)malloc(sizeof(int)* N);



另外还想问一下如果要创建一个三维数组,元素是float型的,arr[19710][210][160],大概有多大,
如何创建呢?
2017-12-15 16:33
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:5 
以后这种问题自己网上问度娘,会创建二维,就不会创建三维了么
2017-12-15 19:54
校草
Rank: 1
等 级:新手上路
帖 子:50
专家分:7
注 册:2017-3-15
收藏
得分:0 
回复 4楼 GBH1
抱歉,因为任务比较急,慢慢摸索没有时间了,还请大哥指教!
三维arr[A][B][C]的float元素是不是如下呢:

程序代码:
float*** CreateGrid(int A,int B,int C)
{
    int*** arr = NULL;

    tt = (int***)malloc(sizeof(int)*A);
    for(int i=0;i<A;i++)
    {
        arr[i] = (int**)malloc(sizeof(int)*B);;
        for (int k=0;k<B;k++)
        {
            arr[i][k] = (int*)malloc(sizeof(int)*C);
        }
    }
    return arr;
}
void FreeGrid(int*** arr,int A,int B,int C)
{
    if(arr != NULL)
    {
        for(int i=0;i<A;i++)
        {
            for (int j=0;j<B;j++)
                                                    {
                free((arr[i][j]));
            }
            free(arr[i]);
        }
        free(arr);
        arr = NULL;
    }
}


遍历是不是:
    for (int i = 0; i < A; i++) {
        for (int j = 0; j < B ; j++) {
            for (int k = 0; k < C; k++){
                fscanf(file,%f,&arr[i][j][k])
               }
        }
    }

                 
2017-12-16 10:44
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:0 
要返回float,声明的arr却是int性,我服,你贴代码都不用编译器试一下么
2017-12-16 13:15
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
float*** create_arr(int a,int b,int c){//数组为arr[a][b][c] 
    float*** arr = (float***)malloc(sizeof(float**)*a);
    for(int i=0;i<b;i++){
        arr[i] = (float**) malloc(b*sizeof(float*));
        for(int j=0;j<c;j++){
            arr[i][j] = (float*)malloc(c*sizeof(float));
        }
    }
    return arr;
}

void delete_arr(float*** arr,int a,int b){
    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++){
            free(arr[i][j]);
        }
    }
    for(int k=0;k<a;k++){
        free(arr[i]); 
    } 
    free(arr);
} 
2017-12-16 13:33
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:0 
最后那个arr[i]是arr[k],手抖了一下
2017-12-16 13:36
快速回复:各位大哥如何创建一个超大的二维数组,并将数据储存进去,转置再读取出 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018051 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved