シンプルであるべきものと混同する。これをデバッグするのに少し時間を費やしましたが、あまり進んでいません。誰かが私を助けてくれれば幸いです。
この関数で指定されている値/列/行のトリプルを指定して、arrayfire で疎行列を定義しようとしています。次の行列をスパースとして保存したい:
3 3 4
3 10 0
4 0 3
次のようにコーディングします。
int row[] = {0,0,0,1,1,2,2};
int col[] = {0,1,2,0,1,0,2};
double values[] = { 3,3, 4,3,10,4,3};
array rr = sparse(3,3,array(7,values),array(7,row),array(7,col));
af_print(rr);
af_print(dense(rr));
次の出力が得られます。
rr
Storage Format : AF_STORAGE_CSR
[3 3 1 1]
rr: Values
[7 1 1 1]
1.0000
2.0000
4.0000
3.0000
10.0000
4.0000
3.0000
rr: RowIdx
[7 1 1 1]
0
0
0
1
1
2
2
rr: ColIdx
[7 1 1 1]
0
1
2
0
1
0
2
dense(rr)
[3 3 1 1]
0.0000 0.0000 0.0000
0.0000 0.0000 3.0000
3.0000 0.0000 0.0000
格納された行列を密な形式で出力すると、意図したものとはまったく異なる結果が得られます。
rr の高密度バージョンを印刷する出力を作成するにはどうすればよいですか。
3 3 4
3 10 0
4 0 3