問題タブ [sparse-matrix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
144 参照

.net - .NET のスパース ソート数値シーケンス クラス

非常に具体的なクラスが必要です。既存のクラスがあるかどうかを知りたいので、再実装する必要はありません。セット商品を持っています。各アイテムには、重量に関連付けられた数値があります。各アイテムの重量はセット内で固有です。アイテムは重量順に分類する必要があります。重量はアイテムごとに変更できますが、重量を変更する操作は非常にコストがかかります。セットで頻繁に実行される操作があります-アイテムの重みを変更することにより、セット内のアイテムの範囲を移動します。したがって、リストのようなクラスが必要ですが、アイテムの重みを管理するためのロジックが組み込まれています。移動操作での重みの衝突を最小限に抑え、重みの変更操作を最小限に抑えることでパフォーマンスを向上させるには、重みシーケンスをまばらにする必要があります。クラス インターフェイスは次のようになります。

フレームワークまたは PowerCollections で同様のものは見つかりませんでした。このクラスを使用して、データベースの順序付けられたレコード セットの操作を管理するつもりであることは、すでにご理解いただけたと思います :) ありがとうございます。

0 投票する
1 に答える
1748 参照

matlab - 多数のスパース行列を持つ cell 配列を含む matlab cell2mat( ... ) 関数がメモリを予期せずオーバーフローする

Matlab と cell2mat() 関数を使用すると、メモリに関して奇妙な動作が発生します...

私がやりたいことは次のとおりです。

しかし、残念なことに、「DOH」で示される行は、疎行列のサイズを合計した場合に必要以上に、途方もない量のメモリを使用します...大きすぎる中間構造を作成するように。

以下は問題なく動作しますが、二重インデックスは par-for では機能しないため、1 つのコアしか使用できません。

私の疑いでは、後者の場合、各セル要素のサイズははるかに扱いやすい... 20,000x1 疎行列のようですが、前者では、これらの「外側」要素は 20,000 x 5,000 になり、Matlab が望む場所に何らかの形で適合しません。それらを一時変数として配置すると、極度に希薄であるにもかかわらず、メモリ使用量が制御不能になります。

メモリの使用と上記に関して従うべき規則はありますか? または、2番目のケースでジャイブするようにparforの使用を変更する方法は? 「parfor」はちょっと新しいので、他のコア機能よりもウェブ上にそれについての情報が少ない... matlab の 8 つのコピーを実行するよりもはるかに効率的です!

0 投票する
3 に答える
502 参照

java - マトリックス/テーブルの集計と検索のパフォーマンスを向上させる

製品機能マトリックスがあります。数千の行 (製品) と数百の機能があります。製品にこの機能があるかどうかを示すバイナリ値があります。したがって、40,000 行と 900 列のテーブルになる可能性があります。

Product-feature matrix
pr f1 f2 f3 fn ...
01 0 1 1 1
02 0 0 0 0
03 1 0 1 0
04 1 0 1 0
.....

まず、特定の機能セット QEg Q=(f1=1, f5=1, f27=1) を持つ製品を見つけなければなりません。簡単に言えば、青い車、ハッチバック、3ドアを見つけてください。

Result 1
Given Q=(f1=1, f5=1, f27=1)
Relevant products: 03, 04, 08...

次に、最も重要なことですが、一連の機能 Q を持ち、機能 f_i (ここで i - 1..n) も持つ製品がいくつあるかを見つけなければなりません。つまり、Qを満たす行を選択し、各列に1がいくつあるかを数えます(SUM集計を行います)。たとえば、青い車、ハッチバック、3 ドアには、ディーゼル エンジン、ガソリン エンジン、キセノン ライトも何台ありますか。

Result 2
Given Q=(f1=1, f5=1, f27=1)
sum f2 = 943
sum f3 = 543
sum f4 = 7
sum f6 = 432
....

もちろん、RDBMS を使用してこのタスクを解決することは可能ですが、それほど効果的ではありません。一般に、各列の製品と集計の両方を検索するためにフルスキャンが必要になります。少なくとも、このタスクに効果的な B ツリー インデックスを作成する方法がわかりません。Oracle ビットマップ インデックスは役に立ちますが、Oracle を使用できません。

現在、このタスクには MySQL を使用していますが、良い結果が得られていません。実際には、列の量を減らすために整数表現を使用しています (機能をグループ化し、bool 値ではなく整数を列に格納します)。

このマトリックスをスパース バイナリ マトリックスとして扱うことができます。そして、それを完全にメモリに保存することは大きな問題ではありません。また、いくつかのアルゴリズムを適用して、疎行列、ベクトル空間 (SVD、行列とベクトルの乗算など) を処理できるかどうか疑問に思っています。ただし、集計ではなく、ベクトル Q を満たす製品を見つけるのに役立つ可能性があります。問題は、スペースではなく、集約の時間にあります。

おそらく、製品を見つけて各列の集計を行うのに役立つマルチリンクリストとしてマトリックスを保存することは可能です。

最後に、問題はこのタスクをどのように処理するかです。特定の機能を備えた製品を見つけて、追加機能を備えた製品を数えるための最も効果的なアルゴリズムは何ですか (列ごとに集計)。

0 投票する
2 に答える
244 参照

perl - どうすればスパース行列をPerlからRに渡すことができますか?

私は非常にスパースなPerl行列(配列の配列)を持っています。ここで、undef値はゼロと同等です。10〜1000行、最大100k列です。次のようになります。

...私が言ったように-非常にまばらです。

このマトリックスをRスクリプトで使用したいと思います(前の投稿を参照)。1つの方法は、テーブルをPerlからファイルに印刷することです(行ごとに1行)、に遭遇した0ときはいつでも印刷しundefます。

しかし、おそらく、このスパース行列を渡すためのより良い、よりコンパクトな方法がありますか?

0 投票する
4 に答える
640 参照

c++ - ブーストでcompress_matrixを動的に変更する効率的な方法はありますか?

私は ublas::Compressed Matrix を使用して、スパース線形ソルバーである UMFPACK を操作しています。私はシミュレーションを行っているため、係数行列の拡大/縮小といくつかの疎行列の乗算が含まれる可能性がある線形システムがわずかに異なる方法で構築されるたびに。線形システムの規模は約 25k です。

Boost が UMFPACK で動作するためのバインディング パッチがあっても、マトリックスを時々変更する必要があります。行列を初期化するときのゼロ以外の値)。また、ublas::range を使用して列/行を動的に追加します。

私の質問は次のとおりです。これを行う効率的な方法はありますか? 今のところ、私には遅すぎます。15k のような次元の行列を転置すると、ほぼ 6 秒かかり、約 12k 行を追加するのは高速ですが (これは行優先の行列だと思います)、行列に同じ数の列を追加すると、最大 20 秒かかります (同じだと思います)。そのため、列優先の行列を使用しても、必要な合計時間は同じになります)。

ここでちょっと必死になっています。どんな提案でも大歓迎です。

乾杯。

0 投票する
2 に答える
2997 参照

r - 係数名を R の式に変換する

因子を含む式を使用する場合、適合モデルは係数に XY という名前を付けます。ここで、X は因子の名前で、Y は因子の特定のレベルです。これらの係数の名前から式を作成できるようにしたいと考えています。

理由: なげなわをスパース計画行列に適合させる場合 (以下で行うように)、非ゼロ係数の項のみを含む新しい数式オブジェクトを作成したいと考えています。

これから私は式を持ちたいと思います

formula() と all.vars() を無駄にチェックアウトしました。また、これを解析する関数を書くのは、さまざまな種類の用語が発生する可能性があるため、少し面倒です。たとえば、x が数値で文字が因子の場合の x:letter や、もう 1 つの煩わしいケースとしての I(x>5):letter の場合です。

だから、数式とその文字表現の間で変換して元に戻す関数を認識していませんか?

0 投票する
6 に答える
46292 参照

python - scipy.sparseベクトル(または行列)を反復処理する

scipy.sparseを使用してスパース行列のゼロ以外のエントリを反復処理するのが最善の方法だと思います。たとえば、次のようにすると、次のようになります。

出力は

したがって、イテレータはゼロ以外のエントリだけでなく、すべての要素にアクセスしているように見えます。APIを見てきました

http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.lil_matrix.html

少し検索しましたが、うまくいく解決策が見つからないようです。

0 投票する
1 に答える
1153 参照

python - Python hclusterで疎行列を使用するには?

Pythonでhclusterライブラリを使用しようとしています。hcluster で疎行列を使用するのに十分な Python の知識がありません。誰か助けてください。だから、私がやっていること:

data.dmp には、次のような行列が含まれています。

行列の右上部分のみが含まれます。私はそれを英語で正しく綴る方法がわかりません:)したがって、すべての数字は主対角線よりも上にあるため、data.dmpには次が含まれます:1 0 1, 0 1 , 0

理由は不明ですが、hcluster は逆の値を使用します。たとえば、A!=C の場合は 0 を使用し、A == D の場合は 1 を使用します。

リンケージY

したがって、行列 Z が必要です (hcluster を正しく使用した場合は?)

しかし、次の問題があります。

  1. 大量の入力データに疎行列を使用したいのですが、今のように入力データを生成するのに時間がかかるため、別の言語から python にデータをインポートする必要があるため、テキスト ファイルを読み取る必要があります。親切に、pythonの第一人者はそれを作る方法を提案していますか?

  2. python hcluster を使っていた人へ、膨大な量のデータ、数百行を処理する必要があるのですが、hcluster でできるのでしょうか? このアルゴリズムは本当に正しい HAC を生成しますか?

読んでくれてありがとう、助けてくれてありがとう!

0 投票する
1 に答える
4950 参照

sparse-matrix - スパース行列とその3タプル表現

このスパース行列とその3タプル表現は私の頭に浮かびません...少しトリッキーか、私が勉強しているところからの私のリソースは本当にそれほど良くありません...これがURI スパース行列スライドです

ですから、何か共有したいことがあれば、どうぞどうぞ。

ありがとう

0 投票する
5 に答える
1150 参照

c++ - Linux で巨大な疎行列を効率的に計算するための C/C++ インターフェイスを探しています

Linux で巨大な疎行列を効率的に計算するための C/C++ インターフェイスを探しています。マトリックスは、数百万×数千/数千になる可能性があります。いくつかの既存のライブラリを確認しましたが、私の要件をすべて満たすものはないようです。

1、要素を動的に追加して疎行列を作成する必要があります。(SparseLib++ ではありません)

2、別の疎行列の列を異なるスカラーでスケーリングできるように、疎対角行列を作成できる必要もあります。(このためのライブラリが見つかりませんでした。また、疎行列を列ごとにスケーリングする別の方法があるかもしれません)

3、行列/ベクトルで乗算された行列の操作をサポートする必要があります(多くのライブラリがこれらの基本的な操作をサポートしています)

4、MATLAB の .* や ./ のように、2 つのスパース行列またはベクトル間のエントリごとの乗算または除算をサポートする必要があります (このためのライブラリが見つかりませんでした。1 つのスパースのいくつかのエントリを選別するためにこの操作が必要です)行列と別の疎行列)

5、マトリックス反転または線形ソルバー。(ほとんどのライブラリは、線形システムのソルバーを提供します)

私は元々、アルゴリズムを実装するために Python で scipy を使用していました。Python はメモリを消費しすぎて遅いので、プログラムを C に変換したいと考えています。

ありがとう。