2

Pandas データフレームが与えられた場合、cvxopt マトリックスに変換する、またはその逆に変換する最良の方法 (読みやすさまたは実行速度) は何ですか?

現在私はやっています:

cvxMat = matrix(pdObj.as_matrix())
pdObj[:]=np.array(cvxMat)

また、オブジェクトを変換せずに cvxopt 行列と pandas データフレームの混合物を使用して、ベクトルまたは行列代数を行う合理的に読みやすい方法はありますか?

以下は、読みにくいベクトル内積 (pdObj と cvxMat は列ベクトル) です。

(matrix(pdObj.as_matrix()).T*cvxMat)[0]

何かアドバイス?


waitingkuoの回答へのフォローアップ:

pandas データフレームを使用した説明のためだけに:

>>> m1 = cvxopt.matrix([[1, 2, 3], [2, 3, 4]])
>>> m2 = pd.DataFrame(np.array(m1)).T

>>> m1
<3x2 matrix, tc='i'>

>>> m2.shape
(2, 3)

>>> np.dot(m1,m2)
array([[ 5,  8, 11],
       [ 8, 13, 18],
       [11, 18, 25]])

ただし、次の点に注意してください。

>>> m1 * m2
   0  1   2
0  1  4   9
1  4  9  16

[2 rows x 3 columns]
4

2 に答える 2

1

次の方法で、パンダからnumpy配列を取得できますpdObj.values

cvxopt 行列と numpy 行列の間で直接行列乗算を行うことができます

In [90]: m1 = cvxopt.matrix([[1, 2, 3], [2, 3, 4]])

In [91]: m2 = np.matrix([[1, 2, 3], [2, 3, 4]])

In [92]: m1
Out[92]: <3x2 matrix, tc='i'>

In [94]: m2.shape
Out[94]: (2, 3)

In [95]: m1 * m2
Out[95]: 
matrix([[ 5,  8, 11],
        [ 8, 13, 18],
        [11, 18, 25]]) 
于 2014-04-15T08:54:04.260 に答える