我尝试了不同的方法,但我无法理解为什么我不能在numpy中创建矩阵。
我得到一个“TypeError: new ()需要2到4个位置参数,但有5个被给出”我打电话时出错:
def createGST(dictionary):
x = int(dictionary['x'])
y = int(dictionary['y'])
z = int(dictionary['z'])
matrix = np.matrix( (str(1),str(0),str(0),str(x)),(str(0),str(1),str(0),str(y)),(str(0),str(0),str(1),str(z)),(str(0),str(0),str(0),str(1)) )
return matrix
即使没有str()的类型转换也没有用。 我正在使用python 3.4。
答案 0 :(得分:2)
错误消息中的答案是正确的。您已将五个参数传递给np.matrix
:
matrix = np.matrix((str(1), str(0), str(0), str(x)),
(str(0), str(1), str(0), str(y)),
(str(0), str(0), str(1), str(z)),
(str(0), str(0), str(0), str(1)))
np.matrix
不接受五个参数。这就是你的意思:
matrix = np.matrix(((str(1), str(0), str(0), str(x)),
(str(0), str(1), str(0), str(y)),
(str(0), str(0), str(1), str(z)),
(str(0), str(0), str(0), str(1))))
注意额外的括号。
答案 1 :(得分:0)
关于有关4个参数的错误消息,查看np.matrix
代码会显示原因:
class matrix(N.ndarray):
def __new__(subtype, data, dtype=None, copy=True):
....
np.matrix([...],...)
创建了一个类matrix
的对象。所以它称之为班级__new__
。通常对象创建调用__init__
,但这里必须有一些细微差别,需要使用底层__new__
。在任何情况下,您都可以看到错误消息提到的4个参数。第一个是自动的。所以加上你的四个元组会产生5个。
如果您遗漏了MATLAB许可证,请查看Octave。它需要大多数相同的语法。不过,欢迎使用Python和numpy。
np.matrix
可以让事物看起来更像MATLAB,但是更老的版本(例如3.5)。你被限制在2d。一般来说,基本np.array
更有用。