關於java庫讀取hdf5數據集的信息

本文目錄一覽:

Matlab 操作 HDF5文件

在使用Matlab對數據進行預處理時,遇到了內存不足的問題,因為數據量太大,在處理完成以前內存已經爆滿。如果使用Matlab的 .m 文件對文件進行存儲的話,則需要將數據分割成多個文件,對後續的處理造成了不便。HDF5文件則是一種靈活的文件存儲格式,有一個最大的好處就是在Matlab的處理過程中可以對它進行擴展寫入,也就是說不是所有數據處理完以後一次寫入,而是邊處理邊寫入,極大的降低了對系統內存的要求。

HDF5文件類似與一個文件系統,使用這個文件本身就可以對數據集(dataset)進行管理。例如下圖所示,HDF5文件中的數據集皆存儲根目錄 / ,在根目錄下存在多個 group ,這樣一些 group 類似與文件系統的文件夾,在它們可以存儲別的 group ,也可以存儲數據集。

使用Matlab創建HDF5文件的函數是 h5create ,使用如下:

filename 為 h5 文件的文件名(不知道什麼問題,在我的電腦上使用時,這個函數無法指定路徑)。

datasetname 則為數據集的名字,數據集名稱必須以 / 開頭,比如 /G 。

[30,30,3,inf] 位數據集的大小,比如我的數據集為 30×30 大小的彩色圖像,並且我希望數量能夠擴展,那麼就可以指定最後以為度為inf,以表示數量不限。

Datatype 為數據類型

ChunkSize 為數據存儲的最小分塊,為了讓數據能夠具有擴展性,所以為新來的數據分配一定的空間大小,對於一個非常大的數據,這個值設置大一點比較好,這樣分塊就會少一點。比如我的數據集中, 30×30 大小的彩色圖像大概有10萬個左右,那麼1000個存儲在一起較為合適,則 chunksize 設置為:[30,30,3,1000]。

在創建了hdf5文件和數據集以後,則可以對數據集進行寫操作以擴展裡面的數據。使用Matlab寫入HDF5文件的函數是 h5write ,使用如下:

fileName : hdf5文件名

datasetName :數據集名稱,比如 /G

data :需要寫入的數據,數據的維度應該與創建時一致,比如,設置的數據集大小為 [30,30,3,inf] ,那麼這裡的 data 的前三個維度就應該是 [30, 30, 3] ,而最後一個維度則是自由的

start :數據存儲的起點,如果是第一次存,則應該為 [1, 1, 1, 1] (注意數據維度的一致性),如果這次存了10000個樣本,也就是[30,30,3,10000],那麼第二次存儲的時候起點就應該為[1,1,1,10001]

count 存儲數據的個數,同樣要根據維度來(其實就是數據的維度),這裡為[30,30,3,10000]

Matlab中可以使用 h5info 函數來讀取HDF5文件的信息:

然後通過解析fileInfo結構,則可以得到HDF5文件中的數據集名稱、數據集大小等等必要信息。

Matlab中可以使用 h5read 函數來讀取HDF5文件:

filename :HDF5文件文件名

datasetname :數據集名稱

start :從數據集中取數據的其實位置

count :取的數據數量

還是以上面的30×30的彩色圖像為例,如果每次需要取1000個,那麼第一次取時,start應該設置為[1, 1, 1, 1] ,count設置為:[30, 30 ,3 1000]。第二次取值時,start則應該設置為[1, 1, 1, 1001],count則設置為:[30, 30, 3, 1000]。

使用java API如何獲取給定路徑的HDF文件結構

HDFS是Hadoop生態系統的根基,也是Hadoop生態系統中的重要一員,大部分時候,我們都會使用Linux shell命令來管理HDFS,包括一些文件的創建,刪除,修改,上傳等等,因為使用shell命令操作HDFS的方式,相對比較簡單,方便,但是有時候,我們也需要通過編程的方式來實現對文件系統的管理。

比如有如下的一個小需求,要求我們實現讀取HDFS某個文件夾下所有日誌,經過加工處理後在寫入到HDFS上,或者存進Hbase里,或者存進其他一些存儲系統。這時候使用shell的方式就有點麻煩了,所以這時候我們就可以使用編程的方式來完成這件事了,當然散仙在這裡使用的是原生的Java語言的方式,其他的一些語言例如C++,PHP,Python都可以實現,散仙在這裡不給出演示了,(其實散仙也不會那些語言,除了剛入門的Python) 。

hdf5文件下的文件夾怎麼讀取

如果有讀寫權限的,可以直接打開讀取。

如果沒有讀寫權限,按下面操作取得讀寫權限:

一、右鍵單擊需要獲取權限的文件或文件夾,點擊“屬性”,點擊“屬性”中的“安全”選項卡,點擊“高級”按鈕。

二、更改“所有者”,如果“所有者”已經是當前用戶,則這一步可以跳過。進入高級安全設置,單擊“所有者”後面的“更改”。

1、輸入要獲取權限的用戶名,點擊“檢查名稱”;

2、如果用戶名比較複雜或不記得用戶名,可以先點開“高級”,再點擊“立即查找”進行查找用戶,並在結果中找到並選中正確的用戶名,點擊確定;

3、已經識別正確用戶名,再點擊確定;

4、選中“替換子容器和對象的所有者”,再單擊“確定”;權限對話框和屬性對話框全部確定,完成所有者權限獲取。

三、再次右鍵單擊需要獲取權限的文件夾,點擊“屬性”,點擊“屬性”中的“安全”選項卡,單擊“組或用戶名”列表下面的“編輯”,在彈出來的權限對話框中單擊“添加”,選擇用戶後點擊確定。回到權限對話框中,確認選中正確的用戶名後,在下方的權限列表中選中“完全控制”;確定,完成文件夾權限獲取。

備註:

獲取“所有者”和“權限”,如果選中了“替換子容器和對象的所有者”,根據文件夾下文件數量不同,所需時間也不同,並且,如果此目錄下有系統屬性的目錄或文件可能無法被修改,碰到此情況跳過即可。

轉-matlab讀寫hdf5

Matlab讀寫hdf5數據

%Matlab中幾種讀寫hdf5數據的函數

clear;

clc;

close all;

%—————————————————————————————————————

%第一種,包括”hdf5info”,”hdf5read”和”hdf5write”等函數

%讀取hdf5數據

SdsData = hdf5read(‘E:\test.h5′ ,’/SDSName’);

%寫hdf5數據

O2Adetails1.Location =’/GroupName’;

O2Adetails1.Name = ‘SdsName’;

%寫屬性

attr = ‘0~255’;

attr_details.Name = ‘units’;

attr_details.AttachedTo = ‘/GroupName/SdsName’;

attr_details.AttachType = ‘dataset’;

attr1 = ‘0~255’;

attr_details1.Name = ‘DESCRIPTION’;

attr_details1.AttachedTo = ‘/GroupName/SdsName’;

attr_details1.AttachType = ‘dataset’;

hdf5write(‘E:\result.h5′, O2Adetails1, SdsData, attr_details, attr,attr_details1, attr1,’WriteMode’, ‘overwrite’);

%—————————————————————————————————————

%第二種,包括”h5create”,”h5disp”,”h5info”,”h5read”,”h5readatt”,”h5write”和”h5writeatt”等函數

%h5create(filename,datasetname,size,Name,Value),h5create必須制定數據集的維數,不好用

h5create(‘myfile.h5′,’/DS1’,[10 20]);

mydata = rand(10,20);

h5write(‘myfile.h5’, ‘/DS1’, mydata);

%—————————————————————————————————————

%第三種,比較好用,類似於idl中的hdf5讀寫,主要包括:H5F.*、H5G.*、H5D.*、H5A*、H5T.*、H5S.*等相關函數

fid = H5F.create(‘myfile.h5’);

type_id = H5T.copy(‘H5T_NATIVE_FLOAT’);

%HSCO2_O2A_ARP分組

group_id=H5G.create(fid,’HSCO2_O2A_ARP’,’H5P_DEFAULT’,’H5P_DEFAULT’,’H5P_DEFAULT’);

dims = [1016 8 6];

h5_dims = fliplr(dims);

h5_maxdims = h5_dims;

space_id = H5S.create_simple(3,h5_dims,h5_maxdims);

dset_id = H5D.create(group_id,’RadianceConversionO2A’,type_id,space_id,’H5P_DEFAULT’);

H5D.write(dset_id,’H5ML_DEFAULT’,’H5S_ALL’,’H5S_ALL’,’H5P_DEFAULT’,RadianceConversionO2A);

H5S.close(space_id);

H5T.close(type_id);

H5D.close(dset_id);

H5G.close(group_id);

H5F.close(fid);

h5disp(‘myfile.h5’);

原創文章,作者:NSNUY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128708.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NSNUY的頭像NSNUY
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論