(下)三角行列の要素​だけを別の変数として​抽出したい

6 visualizaciones (últimos 30 días)
gafakel
gafakel el 7 de Oct. de 2022
Comentada: gafakel el 12 de Oct. de 2022
お世話になっております。表題の件について、下記のように自分でも方法は思いついたのですが、もっと効率的な方法がないかと思い質問させていただきます。
今、次の行列Aを考えます。
% size of matrix
dim=5;
% example of matrix
A=magic(dim)
A = 5×5
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
ここで、行列Aの下三角行列の成分だけを取ってみると(対角要素も除く)、次のAtrilを得ます。
Atril=tril(A,-1)
Atril = 5×5
0 0 0 0 0 23 0 0 0 0 4 6 0 0 0 10 12 19 0 0 11 18 25 2 0
このAtrilは「Aの下三角行列の要素」以外を0とするものですが、この「Aの下三角行列の要素」だけを列ベクトルとして抽出したいのです。
自分で考えたのは、この「Aの下三角行列の要素」のindexを作ってしまって抽出する方法です。
AtrilVec=Atril(find(tril(ones(dim),-1)))
AtrilVec = 10×1
23 4 10 11 6 12 18 19 25 2
どうにもこの「indexを作ってしまう」方法が非効率的に感じられたため、質問させていただきました。
それこそAtrilからfindを使ってしまってもいいのかなと思ったのですが、次のように下三角行列の要素の中に0が入っていると上手く求められず、断念しました。
B=magic(dim); B([2,4,9,15])=0;
Btril=tril(B,-1)
Btril = 5×5
0 0 0 0 0 0 0 0 0 0 4 6 0 0 0 0 0 19 0 0 11 18 0 2 0
% これだとBtril内の(本来求めたい)0が消える
[~,~,BtrilVec]=find(Btril)
BtrilVec = 6×1
4 11 6 18 19 2
どうぞよろしくお願いいたします。

Respuesta aceptada

交感神経優位なあかべぇ
交感神経優位なあかべぇ el 7 de Oct. de 2022
index作成の、find(tril(ones(dim),-1)) の部分ですが、ones(dim)による数値配列ではなく、true(dim)を使用したlogical配列にすれば、findを介さずともインデックス指定ができるので、少しだけ効率的になると思います。
% size of matrix
dim=5;
% example of matrix
A=magic(dim)
A = 5×5
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
AtrilVec = A(tril(true(dim), -1))
AtrilVec = 10×1
23 4 10 11 6 12 18 19 25 2
  3 comentarios
Akira Agata
Akira Agata el 11 de Oct. de 2022
Editada: Akira Agata el 11 de Oct. de 2022
+1
もし下三角行列の成分が必ず正の数であれば、以下の方法でも実現可能です。
% size of matrix
dim = 5;
% example of matrix
A = magic(dim);
% 下三角行列を作成
Atril = tril(A, -1);
% 正の数だけを抽出
AtrilVec = Atril(Atril > 0)
AtrilVec = 10×1
23 4 10 11 6 12 18 19 25 2
gafakel
gafakel el 12 de Oct. de 2022
コメントいただきありがとうございます!ただ、今回は0が入りえる状況のため、補足いただいた手法だと難しそうです……。
% ここで、0が入るかもしれないために"Atril>=0"でなければならない
AtrilVec = Atril(Atril >= 0)
ただ、ご教示いただいたように条件文を要素として与えてもよいという点は大変参考になりました。ありがとうございます!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!