質問: 行列から条件を指定して値を取り出す 以下のような行列aの2行目の要素で1が連続している時と0が連続しているときの1行目の値の差を取り表示したいですのです。[1 1 0 0] の一区切りならなんとかできるのですが以下に示す行列のように[1 1 0 0 1 1 0 0]と連続している部分が分かれている時それぞれの値をどのようにして求めればいいのかわかりません。 次のような行列があるとします。 a= 0 1 2 4 3 6 4 8 5 9 6 12 1 1 0 0 1 1 0 0 1 1 0 0 この時1が連続してる列の1行目の差(1-0, 6-3, 9-5) b= 1 3 4 0が連続している列の1行目の差(4-2, 8-4, 12-6) c= 2 4 6 というように求めたいのですがどのようにすればよいでしょうか。ご指導をお願いしたいです。
回答: もし、行列aの2行目の要素で 1 (or 0) が偶数個連続している部分があり、かつ要素が 1 (or 0) の列のうち 2k 番目と 2k-1番目との差を取りたいということであれば、以下の方法で計算可能です。 a = [ 0 1 2 4 3 6 4 8 5 9 6 12; 1 1 0 0 1 1 0 0 1 1 0 0]; idx = a(2,:) == 1; b = diff(a(1,idx)); b = b(1:2:end); c = diff(a(1,~idx)); c = c(1:2:end);