問題タブ [matrix-multiplication]

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 に答える
1995 参照

javascript - CSS3D変換を使用してDOMオブジェクトから変換されたマウスイベントデータを受信する

現在、javascriptマウスイベントに、変換された要素の3D空間に対するマウスの位置を簡単に見つけたり計算したりできるデータはありますか?

視覚的に説明するために、
左側は3d行列のないdiv、右側は3d変換後のdivです。
oマウスイベントの発生源です

以下のスクリプトでは、div内の同じピクセルをクリックするとevent.layerX、ドキュメント/画面の2D変換スペースにあるピクセルが報告されます。

私は知っていますが、divのmatrix3dを解析し、それを使用してイベント位置に乗算してこれを発見する可能性についてはわくわくしていませんが、実際の実装では、divはより複雑な変換を行うため、これを実行する必要があります。複数のオブジェクトのすべてのフレームと、それがもたらすオーバーヘッドについて心配しています...しかし、それが私の唯一のオプションである場合、私は確かにそれを助けてもかまいません。

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

python - numpy tensordot 関連の問題

numpy で行列を乗算する際に特定の問題があります。次に例を示します。

最初の行など、各行の 3x3 行列を取得するために、各行にその転置を掛けます。

結果を 3 次元行列 M に格納します。

おそらくテンソルドットを使用して、ループせずにこれを行う方法があると思いますが、見つけることができません。

誰かがアイデアを持っていますか?

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

python - Cython で NumPy を最適化する

現在、純粋な Python で記述したコードを最適化しようとしています。このコードは、NumPy 配列を使用しているため、 NumPyを非常に頻繁に使用しています。以下に、私がCythonに変換した最も単純なクラスを示します。これは、2 つの Numpy 配列の乗算のみを行います。ここ:

私の質問は、「cython -a」が生成するCコードを見ると、非常に効率的ではないように見える多くのNumPy呼び出しがあるため、これを最適化できるかどうか、およびどのように最適化できるかです。

私が考えていたのは、2 つのforループを使用して、配列のエントリを反復処理することでした。おそらく、コンパイラを使用してこれを SIMD 演算で最適化できますか?! 試してみましたが、コンパイルできましたが、奇妙な結果になり、永遠にかかりました。置換関数のコードは次のとおりです。

ただし、前述のとおり、このコードは非常に遅く、期待どおりに機能しません。それで、私は何を間違っていますか?これを最適化し、NumPy 呼び出し操作を削除する最良の方法は何でしょうか?

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

matlab - linsolve のエラー

これは与える:

これを解決するのを手伝ってください。

また、言う形式の方程式を解く他の方法はありますEq1= A*2.1 + B*3.5 +C*1.5か?

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

performance - CUDA 理論帯域幅と実効帯域幅

幅と高さが使用しているブロックサイズの倍数である 2 つの行列を乗算する CUDA カーネルがあります。

私が使用している Nvidia Quadro Fx 3800 の理論上の帯域幅は 50 Gb/s で、奇妙な結果が得られています (実効帯域幅が理論上の帯域幅よりも大きい)。

ここにいくつかの結果を投稿します。

ブロックサイズ 2 あり

[10][10] * [10][10] -> 帯域幅=0,02 Gb/秒 [1000][1000]*[1000][1000] -> 帯域幅=69,4 Gb/秒

ブロックサイズ 64 の場合

[1000][1000] * [1000][1000] -> 帯域幅=486,4 Gb/秒 [10000][10000] * [10000][10000] -> 帯域幅= 45072,12 Gb/秒

Nvidia のベスト プラクティス ガイドから有効な帯域幅の式を使用しました (簡略化していますが、同等のものです (愚かな間違いがない限り))。カーネルは、私が読んだいくつかのNvidia Lecturesと非常に似ているため(等しくない場合)、また適切に機能しているため(afaik)、問題ないと思います。

前もって感謝します

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

cuda - CUDA における非正方行列の乗算

CUDA で行列の乗算に使用するコードでは、正方行列と非正方行列の両方を乗算できますが、幅と高さの両方がブロックサイズの倍数でなければなりません。

たとえば、[3][6] * [6][3] (blocksize=3 を使用) を乗算することはできますが、[3][2]*[2][3] を乗算することはできません。

誰もそれを行う方法を知っていますか? これは私のカーネルです:

前もって感謝します!

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

matlab - Matlabで大きな行列の乗算を加速/回避する方法は?

設定はこちらです。

X:6000x8000非スパース行列

B:数十の非ゼロのみを含む8000x1のスパースベクトル

d:正の数

M:はスパース化されたX'Xです。つまり、大きさがdより小さい要素を0にしきい値処理します。数百の要素だけが残ります。したがって、(X'* X --M)には多くの小さな要素があり、スパースではありません。

ベクトルy=(X'* X --M)* Bを計算したいので、y = X'*(X * B)-M*Bと書き直すことができます。最初の部分は十分に高速ですが、2番目の部分はX'* Xを含み、非常に低速です。

誰かが私がこの計算を加速するのを手伝ってくれるでしょうか?

どうもありがとう!

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

opengl - 人間のためのopenglローテーション

現在、最初にピボットポイントに変換し、次に回転を実行し、最後に原点に戻すことで、ピボットポイントを中心に回転できます。私の例では、肩にそれを簡単に行うことができます。しかし、前腕の肘の周りの回転を追加する方法もわかりません。

肘の周りの前腕の回転について、次のことを試しました。

  1. 肩に変換、回転、原点に変換、前腕に変換、回転、原点に変換
  2. 肩に変換、回転、前腕に変換、回転、肩に変換、原点に変換

どちらも私には効かない。助言がありますか?私は本当にこれに固執しています。

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

c++ - 任意の入力に対する Strassen アルゴリズム

Strassen アルゴリズムを変更して、任意のサイズの行列 (たとえば n=5) で機能するようにするにはどうすればよいでしょうか?

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

cuda - CUBLAS行列の乗算

CUDAで行列乗算を実装した後。私はそれをCUBLASで実装しようとしました(フォーラムの何人かの人々のアドバイスに感謝します)。

正方行列を乗算することはできますが、(もう一度...)非正方行列の操作に問題があります。動作する非正方行列乗算の唯一のタイプは、行列Aの幅(A * B = C)を変更する場合です。

エラーは発生しませんが、結果のマトリックスは間違った値を返します。これが私のコードです(これは基本的にsimpleCUBLAS SDKの例を応用したものです):

何かご意見は?また、誰かがCUBLASで動作している行列乗算の実装を持っているので、比較できますか?前もって感謝します。