亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 C# .net 中的 HDF5DotNet 讀取 HDF5 多維數組數據集?

如何使用 C# .net 中的 HDF5DotNet 讀取 HDF5 多維數組數據集?

C#
慕標5832272 2022-07-23 16:41:32
我需要讀取一個包含 3 x 3 數組的 HDF5 數據集,數據類型為雙精度。從下面的代碼返回時,我的 Visual Studio 2017 Pro 崩潰。使用調試器,此代碼從 HDF5 讀取 2-dim 數組;我可以在調試器中讀取它;但是函數 read_double_array 在返回給調用者時會崩潰。來自 STACKO 示例的第二次代碼嘗試……。    public static double[,]  read_double_array( H5FileId fileId, string dataset_name, int dim1, int dim2 ){    double [,] return_data = new double[ dim1, dim2 ];    try    {        H5Array<double> h5_array = new H5Array<double>( return_data );        H5DataSetId double_array_dataset  = H5D.open( fileId, dataset_name );        H5D.read<double>(   double_array_dataset,                             new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE),                             h5_array );        H5D.close(double_array_dataset);    }    catch( HDFException e )    {        Console.WriteLine( e.Message );        int aa=0;    }    return return_data;}我的代碼第一次嘗試,崩潰了……………………public static double[,]  read_double_array( H5FileId fileId, string dataset_name, int dim1, int dim2 ){        double [,] return_data = new double[ dim1, dim2 ];    try    {        H5DataSetId dataSetId  = H5D.open( fileId, dataset_name );        H5D.read(   dataSetId,                     new H5DataTypeId( H5T.H5Type.NATIVE_DOUBLE ),                    new H5Array<double>( return_data ) );    }    catch( HDFException e )    {        Console.WriteLine( e.Message );        int aa=0;    }    return return_data;  <<<<<<<<<<<<<<<<<<   H A N G S   H E R E}
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

我讓它工作了。這是我的代碼...


    // Reads a 2-dim array of double.

// INPUT:  fileId of open HDF5 file

public static bool  read_double_array( H5FileId fileId, string dataset_name, int dim1, int dim2, ref double [,] output_double_array )

{


    try

    {

        output_double_array = new double[ dim1, dim2 ];

        H5Array<double> h5_array = new H5Array<double>( output_double_array );

        H5DataSetId dataset = H5D.open( fileId, dataset_name);

        H5D.read<double>(   dataset, 

                            new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE), 

                            h5_array);

    }

    catch( HDFException e )

    {

        Console.WriteLine( e.Message );

        return false;

    }

    return true;

}


查看完整回答
反對 回復 2022-07-23
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

避免嚴重的痛苦(由于 HDF5 低級實現細節)并查看HDFql。


這是一個使用 C# 中的 HDFql 來讀取名為 double 的數據類型的多維(大小 3x3)數據集的解決方案,該dset數據類型存儲在名為的 HDF5 文件中test.h5(假設文件和數據集都已經存在):


// use HDFql namespace (make sure it can be found by the C# compiler)

using AS.HDFql;


public class Test

{

    public static void Main(string []args)

    {

        // declare variables

        double [,]data = new double[3, 3];

        int x;

        int y;


        // select (i.e. read) dataset "dset" from HDF5 file "test.h5" into variable "data"

        HDFql.Execute("SELECT FROM test.h5 dset INTO MEMORY " + HDFql.VariableTransientRegister(data));


        // display content of variable "data"

        for(x = 0; x < 3; x++)

        {

            for(y = 0; y < 3; y++)

            {

                System.Console.WriteLine(data[x, y]);

            }

        }

    }

}


查看完整回答
反對 回復 2022-07-23
  • 2 回答
  • 0 關注
  • 604 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號