Numpy Matrix:格式错误的字符串

时间:2017-12-08 09:27:23

标签: python string numpy matrix

使用以下代码时出现以下错误ValueError: malformed string

import numpy 
l=[]
for x in [0.0,1.0]:
    for y in [0.0,1.0]:
        for z in [0.0,1.0]:
            if x+y+z ==1:
                print x
                pr_matrix = numpy.matrix('x ; y ; z')
                l.append(pr_matrix)

在我看来,numpy.matrix函数无法理解x,y,z是float类型而不是string类型。 我这样说是因为以下工作正常。

matrix = np.matrix('1 2 2;2 3 1')

1 个答案:

答案 0 :(得分:2)

不要使用numpy.matrix。它已弃用,将在未来的NumPy版本中删除。相反,你可以使用简单的理解

import itertools, numpy as np
arr=np.array([[[x],[y],[z]] for x,y,z in itertools.product(*[[1,0]]*3) if x+y+z==1])[:,:,0]

在这里,itertools.product正在创建笛卡尔积[{1}},这就是你用3个嵌套循环做的事情。要将此参数提供给[0, 1]x[0, 1]x[0, 1],我们基本上首先在可迭代中创建三个itertools.product副本。

然后在此可迭代之前使用星型参数([0,1]),我们指示将此iterable的元素解释为单独的参数,因此我们得到三个不同的参数。这会产生笛卡儿积[/ p>

*

让我们称之为[(1, 1, 1), (1, 1, 0), (1, 0, 1), (1, 0, 0), (0, 1, 1), (0, 1, 0), (0, 0, 1), (0, 0, 0)] 。然后我们对A进行列表理解。对于A中的每个元素(3元组A,我们形成一个列,并将其添加到列表推导创建的列表中,如果它们的总和为1。

结果是

x,y,z

然后创建一个NumPy数组,但注意它是3D。所以我们用切片来看相关部分。您也可以使用[[[1], [0], [0]], [[0], [1], [0]], [[0], [0], [1]]]