網站首頁 編程語言 正文
最近做的工作涉及將matlab中的處理好的mat數據轉換成npy數據,送入到網絡中學習。在處理數據時遇到的一些問題總結如下。
Matlab中的Cell
cell數組的數組(指的是兩層cell)不能使用cell2mat函數
為了解決這個問題,涉及matlab中元組數據的讀取和保存。
cell的讀取
cell的{}是指向cell的內容,而cell的()是指向cell的位置。
cell和mat矩陣的轉換
單個的cell轉換成mat可以直接使用cell2mat函數。
cell2mat:將元胞數組成普通矩陣(要求cell元胞數組的所有內容都必須為相同數據類型,可以為字符,會轉化為字符矩陣)
如果是兩層以上的cell可以自己寫循環依次將數據讀出來,存入另一個數據中。
for i=1:n_actions_train
? ? ?for j=1:n_num
? ? ? ? ?matrix_train(i,j,:,:,:)=train_fea{i}{j}; ?%train_fea是cell數據
? ? ?end ? ??
?end
Matlab中的reshape和permute
reshape
重構函數,將給定的數據重構成我們需要的size的數據。
用法:
B = reshape(A,sz)
B = reshape(A,sz1,...,szN)
B = reshape(A,sz) 使用大小向量 sz 重構 A 以定義 size(B)。
例如,reshape(A,[2,3]) 將 A 重構為一個 2×3 矩陣。
sz 必須至少包含 2 個元素,prod(sz) 必須與 numel(A) 相同。
% eg. 1: 將 1×10 向量重構為 5×2 矩陣。
A = 1:10;
B = reshape(A,[5,2])
每個維度的大小,指定為具有最多一個 [](可選)的兩個或以上的整數。必須至少指定 2 個維度大小,并且最多一個維度大小可以指定為 [],這樣會自動計算該維度的大小以確保 numel(B) 與 numel(A) 相匹配。
當使用 [] 自動計算維度大小時,顯式指定的維度必須均勻劃分為輸入矩陣 numel(A) 中的元素數目。
對于第二個維度以上的維度,輸出 B 不反映大小為 1 的尾部維度。例如,reshape(A,3,2,1,1) 生成 3×2 矩陣。
permute
置換數組維度
B = permute(A,dimorder)
eg. 1 : 創建一個 3×4×2 數組并對其進行置換,交換第一個維度和第三個維度,從而得到 2×4×3 數組.
A = rand(3,4,2)
B = permute(A,[3 2 1])
reshape和permute函數的區別主要在于reshape會改變數據的維度,但數據總量是不變的,只是按原來數據的行列組合變化到新的數據排列方式,其中每個維度的size都可能發生變化。
permute函數只是調換數據維度的順序,比如我們要從某個數據中拿到某兩個維度之間的矩陣,我們可以先用這個函數將這兩個維度先調到外面,方便我們取。
這個函數不會改變每個維度的size。
Please use HDF reader for matlab v7.3 files
matlab中對于較大打mat文件,都建議使用v7.3 來保存數據,但是scipy包中的loadmat函數不能讀取這個版本的數據,搜了一下問題,發現h5py包中的File函數可以讀取這個數據,添加h5py后使用h5py.File()函數就可以讀取了。
IndexError: only integers, slices (:), ellipsis (...)……
經檢查,錯誤之處在索引處使用了浮點數,把matlab中獲得的數據強制轉換成int型。
因為matlab中數據默認保存成double數據,所以如果轉換到其他語言時,要注意到這一點,并且提前強制轉換。
IndexError: index *** is out of bounds for axis 1 with size ***
問題在于下表越界,因為從matlab中獲得的鄰接矩陣記錄鄰居時,下標從1開始,而python中默認下標從0開始。
值得注意的是matlab中下標維度都是從1開始的,而且matlab中的矩陣讀取順序是列優先的,其他語言比如python和C++都是行優先的。所以數據遷移過去都需要先transpose。
總結
原文鏈接:https://blog.csdn.net/faithfulzl/article/details/106810518
相關推薦
- 2022-06-12 Android代碼檢查規則Lint的自定義與應用詳解_Android
- 2022-09-22 Redis配置文件redis.conf詳解
- 2022-04-26 ASP.NET?Core中的Razor頁面使用視圖組件_基礎應用
- 2022-06-02 Android實現水平帶刻度的進度條_Android
- 2022-12-14 正則表達式(?=)正向先行斷言實戰案例_正則表達式
- 2022-07-16 Date 轉為 LocalDate
- 2022-04-08 iOS實現計算器小功能_IOS
- 2022-11-21 小白也能看懂的Redis遍歷鍵和數據庫管理詳解_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支