2016-03-30 8 views
-2

私は3000x3000の行列(例えば、DAT)を持っています。インデックスを使用して行列に値を格納するにはどうすればよいですか?

、別の変数でIは

に格納された7つの値を有する基本的に、

valは

1.7361111e-13 
5.2083338e-13 
1.9675925e-12 
2.5462963e-12 
1.4467592e-12 
2.3148147e-13 
6.3657407e-13 

あるIはまた、7つの値

[x ,y]=find(~isnan(DAT)); 

Xに対応するインデックスを有しますは

です
1666 
1667 
1668 
1669 
1670 
1671 
1672 

Yが(〜ISNAN(DAT))を見つける=

1037 
1037 
1037 
1037 
1037 
1037 
1037 

LOCある

3627666 
3627667 
3627668 
3627669 
3627670 
3627671 
3627672 

Iは元の行列 'DAT' を使用して 'ヴァル' の値を格納します指数を与える。

どうすればいいですか?

P.S.私の実際のデータははるかに大きく、したがって一般的な解決策を探しています。

+0

ありがとうございます。完了... – maximusdooku

+0

使用するプラットフォームまたは言語は? –

+0

Matlab ............... – maximusdooku

答えて

1

論理行列~isnan(DAT)を直接として使用して、元のマトリックスに値を格納することができます。

DAT(~isnan(DAT)) = vals; 
+0

ありがとうございました!それは動作します。 – maximusdooku

0

すべての値を格納する2次元行列ではなく、1次元であるとします(特に大きな行列の方が効率的です)。列優先順序付き行列の場合、式index = x * maxrows + yを解きたい場合は、列の反復にはxを使用し、行の反復にはyを使用します。 maxrowsの値は、3000x3000マトリックスの場合3000です。したがって、x = 1666y = 1037という値が与えられている場合、1次元の列メジャー順行列の対応するインデックス値はindex = 1666 * 3000 + 1037 = 4999037です。

+0

私は索引に関するいくつかの情報を追加しました。ありがとうございました。見てください。私が望むのは、このインデックスを使用して値を保存することです。 – maximusdooku

関連する問題