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]