2016-03-27 8 views
1

を使用して問題私は、単一の行列に異なるスパース行列の配列を格納したいと思い、このような何か:N次元の索引付けは完全な行列のみに許可されています。 - スパースコマンドMATLAB

A(:,:,1) = sparse([0 0 1; 0 1 0]); 

A(:,:,2) = sparse([0 0 1; 0 0 0]); 

A(:,:,3) = sparse([1 0 1; 0 0 0]); 

A(:,:,4) = sparse([0 0 1; 0 1 0]); 

しかし、私はエラーを取得:

N次元を完全な行列のみの索引付けが可能です。 https://www.mathworks.com/matlabcentral/newsreader/view_thread/276098

のが、「バグ修正」へのリンクが壊れていたと私は、この問題に対処する方法がわからないです:

他の人がこの問題に遭遇してきたように思えます。私はセルアレイを使うことができることを知っていますが、私はそれらが遅く、それらを避けようとしていることを知っています。私はfull()コマンドを使うこともできると思いますが、それが最速(最速)なのかどうかはわかりません。

アイデア?

+0

希薄な行列が必要ですか?一般的に、彼らは通常より遅いですが、メモリの制約のため時には避けられないこともあります。 –

+0

btwそのリンクは関係なくですが、ここにキャッシュされたコピーがあります:http://web.archive.org/web/20100308064805/http://www.mathworks.com/access/helpdesk/help/techdoc/rn/bsdgysw- 1.html#bseheyh-1 – Amro

答えて

2

単純に言えば、N次元の疎な配列をMATLABで作成することはできません.2次元行列でなければなりません。また

、サポートされるタイプは、(singleスパース行列を作成するhacksがあるが、それらは、任意の実際の使用のために最終的に役に立たない)のみdouble又はlogicalのいずれかです。

複数のスパース行列を保存する場合は、コンテナタイプ(セル配列や構造体など)を使用する必要があります。


暴言:セル・アレイのが遅いと主張する根拠のです。 arr(:,:,i)またはarr{i}をループしていても、最初はND配列全体でベクトル化された操作(疎配列ではサポートされていません)を実行することを目的としていない限り重要です。だから、セル配列をポインタの配列と考えると、arr{i}は単に別の配列に到達するためにポインタを逆参照するだけです...

関連する問題