1

私は次のSQL Server 2008ような数字の表を送ろうとしています:

1att 2att 3att 4att 5att 6att 7att ... attn
--------------------------------------------
565  526  472  527  483  529  476  470  502
497  491  483  488  488  483  496  515  491
467  516  480  477  494  497  478  519  471
488  466  547  498  477  466  475  480  516
543  491  449  485  495  468  452  479  516
473  475  431  474  460  342  471  386  549
489  477  462  428  489  491  481  483  475
485  474  472  452  525  508  459  561  529
473  457  476  498  485  465  540  475  525
455  477  415  434  475  499  476  482  551
463  476  476  471  488  526  394  439  475
479  473  491  519  483  474  476  474  478
455  518  465  445  496  500  518  470  536
557  498  492  449  478  491  492  476  460
484  509  538  473  548  497  551  477  498
471  430  482  437  516  483  487  453  456
505  476  489  495  472  476  487  516  466
466  495  488  475  550  565  510  473  515
470  490  480  475  479  544  468  486  496
484  495  524  435  469  612  493  467  477
....
....  (several more rows)
....
511  471  529  553  539  501  477  474  494

Visual Studio 2008(C ++プロジェクト内)を介して数学ライブラリにLAPACK

(Visual Studio2008pass the table in SQL Server to LAPACKのc++を介して)メモリポインタのように、またはすべてのテーブルをRAMに格納し、LAPACKがメモリまたはメモリへのポインタを読み取ることは可能ですか?ただし、ファイルに書き込んだり読み取ったりする必要はありません

このようなテーブル(おそらくメモリ内のテーブルの場所など)をLAPACKに渡す方法を提案していただけますか?
(したがって、Visual Studio 2008 c++プロジェクトを介してSQLServerに格納されているテーブルのLAPACKを使用してコンピューティングを行うことができます)

- - 編集 - -

@ MarkD、あなたがあなたの答えで言ったように、std :: vectorクラスを使用して、例のアイデアでSVDを計算する例を教えてください。

4

1 に答える 1

2

LAPACK は、送信されるデータが FORTRAN スタイル (列順) の配列である必要があります。SQL から LAPACK にデータを直接渡すことはできませんが、データを列順の連続したメモリ配列に読み取り、配列の最初の要素へのポインターを目的の LAPACK ルーチンに渡す必要があります。

これをはるかに簡単にする C/C++ 用の LAPACK ラッパーが多数あります。

編集:そのような配列を渡す方法を具体的に探しているのを見ました。前述したように、これを行うためのラッパーが数多くあります (C/C++ LAPACK を検索してください)。配列を作成する簡単な方法は、std::vector クラスを使用することです。次に、データを列ごとに読み取り、ベクトルに要素を追加します。したがって、例に示す配列を列順に並べたい場合、ベクトルは次のようになります。

//Column 1            Column 2            Column 3          ...   last element 
 [565 497 467 488 ... 526 491 516 466 ... 472 483 480 547 ... ... 494]

次に、対象の LAPACK ルーチンに最初の要素のメモリ位置を渡します。たとえば、次のようになります。

&myVector[0]

これは std::vector を使用して可能です。標準では、ベクトルが連続したメモリ ストレージを使用することが保証されているためです。LAPACK ルーチンはすべて、渡す行列/ベクトルのサイズ/次元も必要とします (そのため、関数呼び出しでこれらの値を計算/指定する必要があります)。

使用したい特定の LAPACK ルーチンを投稿していただければ、より詳細な例を示すことができます。

于 2011-05-20T02:18:07.293 に答える