このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
countLabelValues
説明
は、cnt
= countLabelValues(lss
,lblname
)lblname
という名前のラベルの値をカウントし、結果をテーブル cnt
に返します。cnt
には、ラベル値のカウントと割合が含まれます。lblname
が ROI またはポイント ラベルのとき、cnt
には、特定のカテゴリの値を少なくとも 1 つもつメンバーの数も含まれます。countLabelValues
は以下をサポートしていません。
サブラベル
LabelDataType プロパティが
'table'
または'timetable'
に設定されたラベル定義インスタンスの値を、カテゴリの離散集合をもつベクトルに変換できないラベル。一意の離散カテゴリのセットを使用して、ラベル値をグループ化できなければなりません。サポートされていないラベルの例は次のとおりです。
timetable の cell 配列
異なるサイズの行列を含む cell 配列
例
ラベル値のカウント
クジラの歌の録音を含むラベル付き信号セットを読み込みます。
load whales
lss
lss = labeledSignalSet with properties: Source: {2x1 cell} NumMembers: 2 TimeInformation: "sampleRate" SampleRate: 4000 Labels: [2x3 table] Description: "Characterize wave song regions" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
セット内のラベルの名前を取得します。
getLabelNames(lss)
ans = 3x1 string
"WhaleType"
"MoanRegions"
"TrillRegions"
セットの 2 つのメンバーがシロナガスクジラであることを確認します。
countLabelValues(lss,"WhaleType")
ans=3×3 table
WhaleType Count Percent
_________ _____ _______
blue 2 100
humpback 0 0
white 0 0
各メンバーに 3 つのうめき声の領域があることを確認します。
countLabelValues(lss,"MoanRegions")
ans=2×4 table
MoanRegions Count Percent MemberCount
___________ _____ _______ ___________
false 0 0 0
true 6 100 2
各メンバーに 1 つのふるえ声の領域があることを確認します。
countLabelValues(lss,"TrillRegions")
ans=2×4 table
TrillRegions Count Percent MemberCount
____________ _____ _______ ___________
false 0 0 0
true 2 100 2
ラベル値のカウントおよびデータストアの作成
MATLAB® に MAT ファイルとして含まれているオーディオ信号セットへのパスを指定します。各ファイルには、信号変数とサンプル レートが格納されています。ファイル名をリストします。
folder = fullfile(matlabroot,"toolbox","matlab","audiovideo"); lst = dir(append(folder,"/*.mat")); nms = {lst(:).name}'
nms = 7x1 cell
{'chirp.mat' }
{'gong.mat' }
{'handel.mat' }
{'laughter.mat'}
{'mtlb.mat' }
{'splat.mat' }
{'train.mat' }
指定したフォルダーを示す信号データストアを作成します。サンプル レート変数名を Fs
に設定します。これは、すべてのファイルで共通です。ファイル mtlb.mat
を除くデータストアのサブセットを生成します。サブセット データストアをlabeledSignalSet
オブジェクトのソースとして使用します。
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sds = subset(sds,~strcmp(nms,"mtlb.mat")); lss = labeledSignalSet(sds);
信号にラベルを付けるために、次の 3 つのラベル定義を作成します。
人間の声を含む信号を真とする論理属性ラベルを定義。
各信号の最大値の位置と振幅を示す数値ポイント ラベルを定義。
各信号にオーバーラップのない、長さが均一なランダム領域を選択するためのカテゴリカル関心領域 (ROI) ラベルを定義。
この信号ラベルの定義をラベル付き信号セットに追加します。
vc = signalLabelDefinition("Voice",'LabelType','attribute', ... 'LabelDataType','logical','DefaultValue',false); mx = signalLabelDefinition("Maximum",'LabelType','point', ... 'LabelDataType','numeric'); rs = signalLabelDefinition("RanROI",'LabelType','ROI', ... 'LabelDataType','categorical','Categories',["ROI" "other"]); addLabelDefinitions(lss,[vc mx rs])
信号にラベルを付けます。
人間の声を含むものとして、
'handel.mat'
と'laughter.mat'
にラベルを付けます。関数
islocalmax
を使用して、各信号の最大値を求めます。その位置と値にラベルを付けます。関数
randROI
を使用して、領域間の最小間隔が N/6 サンプルの場合に長さ N の信号に収まるだけの長さ N/10 サンプルの領域を生成します。それらの位置にラベルを付け、ROI
カテゴリに割り当てます。
点と領域にラベルを付けるときに、サンプル値を時間値に変換します。MATLAB® 配列のインデックス付けを考慮して 1 を減算し、サンプル レートで除算します。
kj = 1; while hasdata(sds) [sig,info] = read(sds); fs = info.SampleRate; [~,fn] = fileparts(info.FileName); if fn=="handel" || fn=="laughter" setLabelValue(lss,kj,"Voice",true) end xm = find(islocalmax(sig,'MaxNumExtrema',1)); setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm)) N = length(sig); rois = randROI(N,round(N/10),round(N/6)); setLabelValue(lss,kj,"RanROI",(rois-1)/fs,repelem("ROI",size(rois,1))) kj = kj+1; end
2 つの信号にのみ音声が含まれていることを確認します。
countLabelValues(lss,"Voice")
ans=2×3 table
Voice Count Percent
_____ _____ _______
false 4 66.667
true 2 33.333
この 2 つの信号の最大振幅が 1 であることを確認します。
countLabelValues(lss,"Maximum")
ans=5×4 table
Maximum Count Percent MemberCount
______________________ _____ _______ ___________
0.80000000000000004441 1 16.667 1
0.89113331915798421612 1 16.667 1
0.94730769230769229505 1 16.667 1
1 2 33.333 2
1.0575668990330560071 1 16.667 1
各信号に、オーバーラップのない 4 つのランダムな関心領域があることを確認します。
countLabelValues(lss,"RanROI")
ans=2×4 table
RanROI Count Percent MemberCount
______ _____ _______ ___________
ROI 24 100 6
other 0 0 0
ラベル付き信号セットのデータを使用して 2 つのデータストアを作成します。
signalDatastore
オブジェクトsd
には信号データが格納される。arrayDatastore
オブジェクトld
にはラベル付け情報が格納される。作成したすべてのラベルに対応する情報を含めるように指定します。
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
データストアの情報を使用して、信号をプロットし、それらのラベルを表示します。
signalMask
オブジェクトを使用して、関心領域を青色で強調表示。最大値の位置を示すために黄色の線をプロット。
人間の声を含む信号に対して赤色の軸ラベルを追加。
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') xline(lbls{:}.Maximum{:}.Location, ... 'LineWidth',2,'Color','#EDB120') if lbls{:}.Voice{:} ylabel('VOICED','Color','#D95319') end end
function roilims = randROI(N,wid,sep) num = floor((N+sep)/(wid+sep)); hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2); roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1]; end
入力引数
lss
— ラベル付き信号セット
labeledSignalSet
オブジェクト
ラベル付き信号セット。labeledSignalSet
オブジェクトとして指定します。
例:
は、属性 labeledSignalSet
({randn(100,1) randn(10,1)},signalLabelDefinition('female'))'female'
を含むランダム信号の 2 つのメンバーのセットを指定します。
lblname
— ラベル名
文字ベクトル | string スカラー
ラベル名。文字ベクトルまたは string スカラーとして指定します。
データ型: char
| string
出力引数
cnt
— 結果テーブル
table
結果テーブル。次の変数を含むテーブルとして返されます。
Count
— 特定のカテゴリのラベル値の数。Percent
— すべてのラベル値に対する特定のカテゴリのラベル値の数の割合。MemberCount
— 特定のカテゴリの値を少なくとも 1 つもつメンバーの数。この変数は、ROI またはポイント ラベルに対してのみ返されます。
バージョン履歴
R2021a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)