reduce()関数を使用して、複数の配列を水平方向にスタックする関数hstack()を作成しようとしています。簡単な例として、
>>>>M=eye((4))
>>>>M
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
>>>>hstack([M,M])
array([[ 1., 0., 0., 0., 1., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 1., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 1., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 1.]])
これは私が望むように機能します。今私は定義します
>>>> hstackm = lambda *args: reduce(hstack, args)
そして、前のケースのhstack()を実行してみてください
>>>>hstackm([M,M])
[array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]]),
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])]
これは正しくありません。適切な出力を取得するためにhstackm()を定義するにはどうすればよいですか?
私の最終的な目的は、可能であればSPARSE行列をスタックするhstackm()関数を作成することです。何かのようなもの、
hstackm = lambda *args: reduce(sparse.hstack, args).
_*args_はcsrまたは_lil_matrix_になります
ありがとうございました