.mat
6 ビュー (過去 30 日間)
表示 古いコメント
matlab で作成した、20000行×3列のtable配列をA.matで保存しました。
A.matを読み出し、20000行×3列のtable形式で利用したいと思っています。
①load(A.mat)とすると、table形式ではなくstructの形式で呼び出されてしまう。
loadの使用方法が間違っているか、別の関数を使うべきか。
②struct形式で呼び出してしまったため、struct2tableを使用して、table形式に変更したところ20000行×1列になってしまう。
原因がわからないため、理由を教えてほしいです。
よろしくお願いいたします。
0 件のコメント
採用された回答
Atsushi Ueno
2022 年 3 月 8 日
まず①について回答するため、質問の状況を再現します
rng = 1:20000; lst = perms('abcdefgh'); Name = cellstr(lst(rng,:));
Age = randi([20 80],rng(end),1); Height = randi([140 180],rng(end),1); % テーブルの内容は適当です
T = table(Name,Age,Height); % 20000行×3列のtable配列を作成
save('A.mat','T'); % A.matで保存
New = load('A.mat') % 質問の現象を再現(構造体が出力された。フィールドTは元のテーブルTと同一内容)
% S = load(___) は、前述の構文グループのいずれかの入力引数を使って、データを S に読み込みます。
% filename が MAT ファイルの場合、S は構造体配列になります。
>loadの使用方法が間違っているか
⇒その使用方法(S = load(___)の形)は間違っていません。上記のように構造体を出力する仕様なのです。構造体にはテーブルと同じ変数名のフィールドがあり、そのフィールドは保存したテーブルと同じ内容です。
>別の関数を使うべきか
⇒NOです。先の回答のようにload関数をS = load(___)の形ではなくload(___)の形で使うべきです。尚その際、登録した変数名が既にワークスペースに存在した場合はそれを上書きしてしまうので注意が必要です。
load('A.mat'); % S = load(___)の形ではなくload(___)の形で使う
T % 元のテーブルTが再現された
その他の回答 (1 件)
Hernia Baby
2022 年 3 月 8 日
もしかしたら保存部分でひっかかってるかもしれません。
例えばほかの変数も保存している等が考えられます。
save はどのようになっていますでしょうか?
------
以下、table型で読み込まれていることを確認できるサンプルです。
サンプルを作ります
clc,clear,close all;
LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
tableを作り、保存します
T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)
save("test.mat","T")
ワークスペースをすべて消去し、呼び出します
clear
load("test.mat")
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!