使用以下代码时出现以下错误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')
答案 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]]]
。