4

python:python3.2 cvxopt:1.1.5 numpy:1.6.1

http://abel.ee.ucla.edu/cvxopt/examples/tutorial/numpy.htmlを読みました

import cvxopt
import numpy as np
cvxopt.matrix(np.array([[7, 8, 9], [10, 11, 12]]))

私は得た

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-numeric element in list

によってnp.array(cvxopt.matrix([[7, 8, 9], [10, 11, 12]]))、私は得た

array([[b'\x07', b'\n'],
   [b'\x08', b'\x0b'],
   [b'\t', b'\x0c']], 
  dtype='|S8')
4

3 に答える 3

2

cvxoptディスカッションフォーラム(https://groups.google.com/forum/?fromgroups=#!topic/cvxopt/9jWnkbJvk54)に投稿したパッチが適用されたdense.cを確認してください。これで再コンパイルすると、np配列を密な行列に変換できるようになります。スパース行列にも同じ種類の編集が必要になると思いますが、それらは必要ないので、開発者に任せます。

于 2012-11-20T09:23:51.100 に答える
2

修正されていませんが、簡単な回避策

cvxopt.matrix(nparray)

cvxopt.matrix(nparray.T.tolist())

反対方向にはより厳しいです。int 配列を期待する場合は、

np.vectorize(lambda x: int.from_bytes(x, 'big'))(np.array(cvxoptmat).T)

double 配列の場合:

import struct
np.vectorize(lambda x: struct.unpack('d', x))(np.array(cvxoptmat).T)
于 2012-12-07T14:03:23.667 に答える