配列の長さが違う2つの配列を揃える方法

配列の長さが違う2つの配列を、同じ長さに合わせるためには、どのような方法があるでしょうか?
(例)
A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] ;
B = [10,NaN,NaN,NaN,1,NaN,5,NaN,NaN,-1];
配列Bのデータは不等間隔でサイズも配列Aと異なります。
この配列Bを20等分し長さを揃えた
C = [10,9,8,7,6,5,4,3,2,1,2,3,4,5,4,3,2,1,0,-1] ;
が必要です。
*実際の配列は数万行あります。
この配列Cは線形で補完できるものです。
よろしくお願いします。

 채택된 답변

michio
michio 2020년 3월 4일

0 개 추천

その条件ですとパッと思いつくのは linspace 関数でした。2つの値の間を線形補間します。
B = [10 1];
C = linspace(B(1),B(2),length(A))
C =
10 9 8 7 6 5 4 3 2 1
linspace 関数の詳細はこちら

댓글 수: 4

Aki
Aki 2020년 3월 5일
ご回答ありがとうございます。 質問の例は少し簡略化しすぎていたので編集しました。
実際には、データポイントが不等間隔であるので、プログラムが複雑になりそうですね。 ありがとうございます。
michio
michio 2020년 3월 5일
**
B = [10,NaN,NaN,NaN,1,NaN,5,NaN,NaN,-1];
この配列Bを20等分し長さを揃えた
C = [10,9,8,7,6,5,4,3,2,1,2,3,4,5,4,3,2,1,0,-1];
**
という部分の20等分とはどう理解すればよいでしょうか。
上の例だと、、もともと10要素の B を均等(?)に 20 要素に伸ばしたとして、データ点がない部分(NaN) については無視して、線形内挿できればよい?
それなら interp 関数でできそうです。例を作ってみるので少々お待ちください。
michio
michio 2020년 3월 5일
例えば
B = [10,NaN,NaN,NaN,1,NaN,5,NaN,NaN,-1]; % もとの配列
idx = ~isnan(B);
position = find(idx); % NaN ではない要素位置を取得
% 1 から length(B) までを均等に20分割した点において、内挿値を計算。
C = interp1(position, B(idx), linspace(1,length(B),20))
と実行すると
C =
1 列から 15
10.0000 8.9342 7.8684 6.8026 5.7368 4.6711 3.6053 2.5395 1.4737 1.5263 2.4737 3.4211 4.3684 4.6842 3.7368
16 列から 20
2.7895 1.8421 0.8947 -0.0526 -1.0000
が得られます。参考になりましたら。
Aki
Aki 2020년 3월 15일
参考になりました。
ありがとうございました。

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

태그

질문:

Aki
2020년 3월 4일

댓글:

Aki
2020년 3월 15일

Community Treasure Hunt

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

Start Hunting!