.mat

조회 수: 17 (최근 30일)
美紗子 馬渕
美紗子 馬渕 2022년 3월 8일
댓글: 美紗子 馬渕 2022년 3월 9일
matlab で作成した、20000行×3列のtable配列をA.matで保存しました。
A.matを読み出し、20000行×3列のtable形式で利用したいと思っています。
①load(A.mat)とすると、table形式ではなくstructの形式で呼び出されてしまう。
loadの使用方法が間違っているか、別の関数を使うべきか。
②struct形式で呼び出してしまったため、struct2tableを使用して、table形式に変更したところ20000行×1列になってしまう。
原因がわからないため、理由を教えてほしいです。
よろしくお願いいたします。

채택된 답변

Atsushi Ueno
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と同一内容)
New = struct with fields:
T: [20000×3 table]
% S = load(___) は、前述の構文グループのいずれかの入力引数を使って、データを S に読み込みます。
% filename が MAT ファイルの場合、S は構造体配列になります。
>loadの使用方法が間違っているか
⇒その使用方法(S = load(___)の形)は間違っていません。上記のように構造体を出力する仕様なのです。構造体にはテーブルと同じ変数名のフィールドがあり、そのフィールドは保存したテーブルと同じ内容です。
>別の関数を使うべきか
⇒NOです。先の回答のようにload関数をS = load(___)の形ではなくload(___)の形で使うべきです。尚その際、登録した変数名が既にワークスペースに存在した場合はそれを上書きしてしまうので注意が必要です。
load('A.mat'); % S = load(___)の形ではなくload(___)の形で使う
T % 元のテーブルTが再現された
T = 20000×3 table
Name Age Height ____________ ___ ______ {'hgfedcba'} 40 162 {'hgfedcab'} 42 140 {'hgfedbca'} 41 148 {'hgfedbac'} 52 174 {'hgfedacb'} 27 172 {'hgfedabc'} 53 179 {'hgfecdba'} 23 148 {'hgfecdab'} 61 157 {'hgfecbda'} 32 178 {'hgfecbad'} 58 179 {'hgfecadb'} 46 152 {'hgfecabd'} 74 141 {'hgfebdca'} 76 153 {'hgfebdac'} 53 179 {'hgfebcda'} 71 140 {'hgfebcad'} 57 161
  댓글 수: 2
Hernia Baby
Hernia Baby 2022년 3월 8일
なるほど、変数に格納してる可能性もありましたね
美紗子 馬渕
美紗子 馬渕 2022년 3월 8일
ご回答ありがとうございました。
おっしゃられた通り、変数に格納していたため構造体配列で読み込みをしておりました。
変数を使用せずに、loadの関数を使用することでtable配列で読み込むことができました。
ありがとうございました。
不明瞭な質問にも関わらず、的確にご回答いただきありがとうございました!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hernia Baby
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")
  댓글 수: 1
美紗子 馬渕
美紗子 馬渕 2022년 3월 9일
ご回答ありがとうございました。
ご指摘いただいた事項を確認してみましたが、同じ方法で使用しておりました。
今回は、私のload関数の使用方法の間違いをご指摘いただいた方の回答を採用させていただきました。
ご協力いただき、大変ありがとうございました。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 table에 대해 자세히 알아보기

태그

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!