2つの行列の要素を一致させる際に問題があります。最初の要素はismember
を使用して一致させることができますが、2番目の要素は範囲内でなければなりません。簡単にするために一致ID + Matlabの行列内の数値を見つける
% col1 is integerID, col2 is a number. -->col1 is Countrycode, col2 is date
bigmat = [ 600 2
600 4
800 1
800 5
900 1] ;
% col1 is integerID, col2 is VALUE, col2 is a range -->value is Exchange rate
datamat = {...
50 0.1 [2 3 4 5 6] % 2:6
50 0.2 [9 10 11] % 9:11
600 0.01 [1 2 3 4] % 1:4
600 0.2 [8 9 10] % 8:10
800 0.12 [1] % 1:1
800 0.13 [3 4] % 3:4
900 0.15 [1 2] } ; % 1:2
I need the answer as:
ansmat = [ 600 2 0.01
600 4 0.01
800 1 0.12
800 5 nan % even deleting this row is fine
930 1 0.15 ] ;
:matrix_1から
- すべてintIDsがmatrix_2に存在する以下の例を参照してください。
- 範囲内の数字は日付です!範囲内では、これらの数値は連続しています。[1 2 ... 5]
- IDの場合、次の行の日付は連続していません。たとえば、次の行に[1 2 3 4]と[8 9 10]が表示されます。
bigmatは巨大なマトリックスです! 300,000〜500,000行になるため、ベクトル化されたコードが評価されます。 datamatはおよそ5000行以下です。セルを行列に変換することができます。各行について、最小値と最大値を持っています。 3列は最小値:最大値です。ありがとう!ここで
おかげアムロを
とにかく、あなたのような何かを試すことができるかもしれしかし、Forループには多くの時間がかかります。私は何とかベクトル化されたアプローチを使用できるかどうかを確認しようとしています。 datamatの3番目の列には、すでに最小値と最大値が別の列として格納されています。私は何とかコードを高速化するためにそれらを使用できるかどうかはわかりません。ありがとう。 – Maddy
@Maddy:あなたは正しいです、私は説明したのと同じサイズのランダムなデータ(300Kと5K)でそれをテストしました。それは70秒かかりました。また、最小/最大については、代わりに 'M'を使用していましたが、大きな違いがあるとは思えません。私はもう一度試してみて、時間を改善できるかどうか確認してください。) – Amro