私は、これはSQL-Serverの構文ですけど、それはあなたに対応するMySQLの構文のスタートを与える必要があります。まばらな行列の性質がうまく処理されているようです。
with I as (
select * from (values
(1,1, 1),
(2,2, 1),
(3,3, 1)
) data(row,col,value)
)
,z_90 as (
select * from (values
(1,2, 1),
(2,1,-1),
(3,3, 1)
) data(row,col,value)
)
,xy as (
select * from (values
(1,2, 1),
(2,1, 1),
(3,3, 1)
) data(row,col,value)
)
,x_90 as (
select * from (values
(1,1, 1),
(2,3, 1),
(3,2,-1)
) data(row,col,value)
)
select
'I * z_90' as instance,
a.row,
b.col,
sum(case when a.value is null then 0 else a.value end
* case when b.value is null then 0 else b.value end) as value
from I as a
join z_90 as b on a.col = b.row
group by a.row, b.col
union all
select
'z_90 * xy' as instance,
a.row,
b.col,
sum(case when a.value is null then 0 else a.value end
* case when b.value is null then 0 else b.value end) as value
from z_90 as a
join xy as b on a.col = b.row
group by a.row, b.col
union all
select
'z_90 * x_90' as instance,
a.row,
b.col,
sum(case when a.value is null then 0 else a.value end
* case when b.value is null then 0 else b.value end) as value
from z_90 as a
join x_90 as b on a.col = b.row
group by a.row, b.col
order by instance, a.row, b.col
利回り:
instance row col value
----------- ----------- ----------- -----------
I * z_90 1 2 1
I * z_90 2 1 -1
I * z_90 3 3 1
z_90 * x_90 1 3 1
z_90 * x_90 2 1 -1
z_90 * x_90 3 2 -1
z_90 * xy 1 1 1
z_90 * xy 2 2 -1
z_90 * xy 3 3 1
はしかし、私はまた、あなたのグラフィックスカードでこれを実行するチェックアウトをお勧めします。 NVIDIAは、「Cプログラミングガイド」で行列乗算を実装する良い例を持っています。
あなたの質問は本当に「どのようにMySQLで数値のシーケンスを生成するのですか? – raina77ow
MySQLは、データベース管理システムであり、線形代数エンジンではありません。その中で行列操作を実行するより適切なツール(JavaやC++アプリケーションのような)に内容を読み込み、必要に応じて結果をデータベースにポストする必要があります。 – andand
ofcの最も単純な解決策は、JavaやC++(または何か他のもの)を使用していますが、私は非常に大きな行列(基本的にはメモリにあてはめるのは問題ありません)を扱っていて、行列を処理するために必要な非常に多くの読み書きのために、メモリとIOオーバーヘッドにチャンクのみを保持する必要があります。 MySQLの数列の生成に関しては、それは確かに1つの解決策であり、私はそれを行う方法を知らない、より良い解決策はSQL関数にSELECTされた行のペアをフィードし、結果としてテーブルを返すことだろう。 – Azolin