Python Numpy中的多维矩阵
我读了一些关于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)) )
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
vsmatrix
的辩论,以及
从
matrix
对象继承自ndarray,因此它们具有与ndarray相同的属性和方法。但是,矩阵对象有六个重要的区别,当您使用矩阵时,可能会导致意外的结果,但期望它们像数组一样工作:
- 可以使用字符串表示法创建矩阵对象,以允许使用Matlab风格的语法,其中空格分隔列,分号(“;”)分隔行
- 矩阵对象始终是二维的。这具有深远的意义,因为m.ravel()仍然是二维的(第一维中有一个1),而项选择返回二维对象,因此序列行为与数组有根本不同
- 矩阵对象的乘搭乘法为矩阵乘法。请确保您对可能希望接收矩阵的函数了解这一点。特别是考虑到asanyarray(m)在m是矩阵时返回矩阵的事实
- 矩阵对象超过乘座功率,将矩阵提升为幂。关于在使用asanyarray(…)获取数组对象的函数中使用power的警告也适用于此事实
- 矩阵对象的默认
为10.0,因此与ndarray的混合操作始终生成矩阵\u数组\u优先级\u
- 矩阵具有使计算更容易的特殊属性。[……]
如果对使用
numpy.matrix
有疑问,请选择ndarray
s:
实际上是一个Matrix
子类:矩阵所能做的一切,ndarray
都能做(反之不完全正确)ndarray
- 矩阵重写
和*
运算符,并且**
和矩阵
之间的任何操作都将返回数据数组
,这对于某些算法来说是有问题的矩阵
ndarray
vsmatrix
的辩论,以及
从
matrix
对象继承自ndarray,因此它们具有与ndarray相同的属性和方法。但是,矩阵对象有六个重要的区别,当您使用矩阵时,可能会导致意外的结果,但期望它们像数组一样工作:
- 可以使用字符串表示法创建矩阵对象,以允许使用Matlab风格的语法,其中空格分隔列,分号(“;”)分隔行
- 矩阵对象始终是二维的。这具有深远的意义,因为m.ravel()仍然是二维的(第一维中有一个1),而项选择返回二维对象,因此序列行为与数组有根本不同
- 矩阵对象的乘搭乘法为矩阵乘法。请确保您对可能希望接收矩阵的函数了解这一点。特别是考虑到asanyarray(m)在m是矩阵时返回矩阵的事实
- 矩阵对象超过乘座功率,将矩阵提升为幂。关于在使用asanyarray(…)获取数组对象的函数中使用power的警告也适用于此事实
- 矩阵对象的默认
为10.0,因此与ndarray的混合操作始终生成矩阵\u数组\u优先级\u
- 矩阵具有使计算更容易的特殊属性。[……]
+1,您需要记住,Numpy的
matrix
类应该用于“实际矩阵”:使用矩阵乘法进行乘法的2D数组,而使用eleme进行乘法的“常规”数组适用于任何维度