在Numpy中创建矩阵?

时间:2015-04-25 00:18:44

标签: python numpy python-3.4

我尝试了不同的方法,但我无法理解为什么我不能在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。

2 个答案:

答案 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更有用。