行列の各要素に対してすべての組み合わせで引き算を行うやり方を知りたい
18 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
以下の行列において,
A=[1 1 2 2 3 3 4 4 5 5 6 6
3 2 3 4 5 6 7 8 9 9 9 9
4 9 8 7 6 5 4 3 2 1 0 1
2 3 4 5 6 8 7 8 6 5 5 4];
操作* : 一列目, 二列目に関してして, 各々の要素の全ての組み合わせにおいて引き算の絶対値を求める
一列目: abs(1-3), abs(1-4), abs(1-2), abs(3-4), abs(3-2), abs(4-2)
二列目: abs(1-2), abs(1-9), abs(1-3), abs(2-9), abs(2-3), abs(9-3)
二列ごとに操作*を行いたいときはどうしたら良いのでしょうか?
具体的には,
A12=[1 1
3 2
4 9
2 3];
A34=[2 2
3 4
8 7
4 5];
%~A1112まで
A12, A34, A45...A1112について操作*を行いたいです.
0 comentarios
Respuestas (1)
Atsushi Ueno
el 28 de Ag. de 2024
Editada: Atsushi Ueno
el 28 de Ag. de 2024
下記サンプルでは、引き算の絶対値を”D”で始まる各変数に格納しました。
入力”A”の列数が奇数の場合、最後の列は無視されます。
A = [1 1 2 2 3 3 4 4 5 5 6 6
3 2 3 4 5 6 7 8 9 9 9 9
4 9 8 7 6 5 4 3 2 1 0 1
2 3 4 5 6 8 7 8 6 5 5 4];
% Aの全列について操作*を行う
for k = 1:width(A)
% 操作:k列目の各要素の組み合わせにおいて引き算の絶対値を求める
D(:,k) = abs(diff(nchoosek(A(:,k),2),1,2));
% kが偶数の時(2列毎)、AとDを個別変数に格納する
if(~mod(k,2))
eval("A"+(k-1)+(k)+"=[A(:,k-1) A(:,k)];");
eval("D"+(k-1)+(k)+"=[D(:,k-1) D(:,k)];");
end
end
D
A12
A34
D12
D34
whos
6 comentarios
Atsushi Ueno
el 29 de Ag. de 2024
あらま。隣同士の二乗和(の平方根)ではなく、2列ずつ組にして二乗和を求めるのですね。
>この二行を一行で表す方法などありますでしょうか?
⇛こうなります。なお列数が奇数の場合エラーになるので予め制限する必要があります。
D = D(:,1:floor(width(D)/2)*2) % 列数を偶数に制限する
%SQ = hypot(D(:,1:end-1),D(:,2:end)); % 隣列との二乗和の平方根を求める
SQ_even = hypot(D(:,1:2:end),D(:,2:2:end)) % 2列ずつ二乗和の平方根を求める
%SQ_even=SQ(:,1:2:end);
A = [1 1 2 2 3 3 4 4 5 5 6 6; 3 2 3 4 5 6 7 8 9 9 9 9; 4 9 8 7 6 5 4 3 2 1 0 1; 2 3 4 5 6 8 7 8 6 5 5 4];
A = A(:,1:floor(width(A)/2)*2); % 列数を偶数に制限する
index = nchoosek(1:height(A), 2); % 1列の全二項組み合わせ(行index)
D = A(index(:,2),:) - A(index(:,1),:); % の差分(abs()は外した)
SQ_even = hypot(D(:,1:2:end),D(:,2:2:end)); % 2列ずつ二乗和の平方根を求める
p = plot(SQ_even'); % プロット
set(p,{'Marker'},{'o';'^';'s';'d';'p';'h'});
Ver también
Categorías
Más información sobre ビッグ データの処理 en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!