4

蟒蛇: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

4

cvxopt == 1.2.6和开始numpy == 1.21.2

import cvxopt
import numpy as np

matrix = cvxopt.matrix(np.array([[7, 8, 9], [10, 11, 12]]))
print(matrix)

产生输出:

[  7   8   9]
[ 10  11  12]

print(repr(matrix))说:

<2x3 matrix, tc='i'>

print(type(matrix))说:

<class 'cvxopt.base.matrix'>

结果矩阵具有整数类型 ( the'i' ),因为起始numpy数组包含整数。从double结果'd'类型开始。

于 2017-08-29T07:58:37.447 回答
2

虽然它不是固定的,但一个简单的解决方法

cvxopt.matrix(nparray)

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

相反的方向更难。如果您期望 int 数组,

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

对于双数组:

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

检查我在 cvxopt 讨论论坛 ( https://groups.google.com/forum/?fromgroups=#!topic/cvxopt/9jWnkbJvk54 ) 上发布的修补后的 dense.c。使用它重新编译,您将能够将 np 数组转换为密集矩阵。我假设稀疏矩阵需要进行相同类型的编辑,但由于我不需要它们,我将把它留给开发人员。

于 2012-11-20T09:23:51.100 回答