Python Numpy中的多维矩阵

Python Numpy中的多维矩阵,python,arrays,numpy,matrix,dimensional,Python,Arrays,Numpy,Matrix,Dimensional,我读了一些关于NumPy和它的矩阵类。在作者所写的文档中,我们只能创建一个二维矩阵。所以我想他们的意思是你只能写这样的东西: input = numpy.matrix( ((1,2), (3,4)) input = numpy.matrix( ((1,2), (3,4), (4,5)) ) 是这样吗? 但当我编写这样的代码时: input = numpy.matrix( ((1,2), (3,4)) input = numpy.matrix( ((1,2), (3,4), (4,5)) )

我读了一些关于NumPy和它的矩阵类。在作者所写的文档中,我们只能创建一个二维矩阵。所以我想他们的意思是你只能写这样的东西:

input = numpy.matrix( ((1,2), (3,4))
input = numpy.matrix( ((1,2), (3,4), (4,5)) )
是这样吗? 但当我编写这样的代码时:

input = numpy.matrix( ((1,2), (3,4))
input = numpy.matrix( ((1,2), (3,4), (4,5)) )
它也能起作用。。。 通常我会说,好吧,为什么不,我不知道它为什么有效。但我必须为我的大学写一份考试,所以我必须知道我是否正确理解了它,或者它们对2D矩阵意味着什么


感谢您的帮助

它们都是二维矩阵。第一个是2x2 2D矩阵,第二个是3x2 2D矩阵。在编程中,它与2D阵列非常相似。例如,第二个矩阵在C中定义为
int-matrix[3][2]

然后,3D矩阵表示它具有以下定义:
int 3D_array[3][2][3]

在numpy中,如果我尝试使用3d矩阵:

>>> input = numpy.matrix((((2, 3), (4, 5)), ((6, 7), (8, 9))))
ValueError: matrix must be 2-dimensional

它们都是二维矩阵。第一个是2x2 2D矩阵,第二个是3x2 2D矩阵。在编程中,它与2D阵列非常相似。例如,第二个矩阵在C中定义为
int-matrix[3][2]

然后,3D矩阵表示它具有以下定义:
int 3D_array[3][2][3]

在numpy中,如果我尝试使用3d矩阵:

>>> input = numpy.matrix((((2, 3), (4, 5)), ((6, 7), (8, 9))))
ValueError: matrix must be 2-dimensional
埃姆雷的回答是正确的,但我仍然想谈谈numpy矩阵的使用,这可能是你困惑的根源


如果对使用
numpy.matrix
有疑问,请选择
ndarray
s

  • Matrix
    实际上是一个
    ndarray
    子类:矩阵所能做的一切,
    ndarray
    都能做(反之不完全正确)
  • 矩阵重写
    *
    **
    运算符,并且
    矩阵
    数据数组
    之间的任何操作都将返回
    矩阵
    ,这对于某些算法来说是有问题的
更多关于
ndarray
vs
matrix
的辩论,以及


matrix
对象继承自ndarray,因此它们具有与ndarray相同的属性和方法。但是,矩阵对象有六个重要的区别,当您使用矩阵时,可能会导致意外的结果,但期望它们像数组一样工作:

  • 可以使用字符串表示法创建矩阵对象,以允许使用Matlab风格的语法,其中空格分隔列,分号(“;”)分隔行

  • 矩阵对象始终是二维的。这具有深远的意义,因为m.ravel()仍然是二维的(第一维中有一个1),而项选择返回二维对象,因此序列行为与数组有根本不同

  • 矩阵对象的乘搭乘法为矩阵乘法。请确保您对可能希望接收矩阵的函数了解这一点。特别是考虑到asanyarray(m)在m是矩阵时返回矩阵的事实

  • 矩阵对象超过乘座功率,将矩阵提升为幂。关于在使用asanyarray(…)获取数组对象的函数中使用power的警告也适用于此事实

  • 矩阵对象的默认
    \u数组\u优先级\u
    为10.0,因此与ndarray的混合操作始终生成矩阵

  • 矩阵具有使计算更容易的特殊属性。[……]

埃姆雷的回答是正确的,但我仍然想谈谈numpy矩阵的使用,这可能是你困惑的根源


如果对使用
numpy.matrix
有疑问,请选择
ndarray
s

  • Matrix
    实际上是一个
    ndarray
    子类:矩阵所能做的一切,
    ndarray
    都能做(反之不完全正确)
  • 矩阵重写
    *
    **
    运算符,并且
    矩阵
    数据数组
    之间的任何操作都将返回
    矩阵
    ,这对于某些算法来说是有问题的
更多关于
ndarray
vs
matrix
的辩论,以及


matrix
对象继承自ndarray,因此它们具有与ndarray相同的属性和方法。但是,矩阵对象有六个重要的区别,当您使用矩阵时,可能会导致意外的结果,但期望它们像数组一样工作:

  • 可以使用字符串表示法创建矩阵对象,以允许使用Matlab风格的语法,其中空格分隔列,分号(“;”)分隔行

  • 矩阵对象始终是二维的。这具有深远的意义,因为m.ravel()仍然是二维的(第一维中有一个1),而项选择返回二维对象,因此序列行为与数组有根本不同

  • 矩阵对象的乘搭乘法为矩阵乘法。请确保您对可能希望接收矩阵的函数了解这一点。特别是考虑到asanyarray(m)在m是矩阵时返回矩阵的事实

  • 矩阵对象超过乘座功率,将矩阵提升为幂。关于在使用asanyarray(…)获取数组对象的函数中使用power的警告也适用于此事实

  • 矩阵对象的默认
    \u数组\u优先级\u
    为10.0,因此与ndarray的混合操作始终生成矩阵

  • 矩阵具有使计算更容易的特殊属性。[……]


+1,您需要记住,Numpy的
matrix
类应该用于“实际矩阵”:使用矩阵乘法进行乘法的2D数组,而使用eleme进行乘法的“常规”数组适用于任何维度