0

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

input = numpy.matrix( ((1,2), (3,4))

这是正确的吗?但是当我写这样的代码时:

input = numpy.matrix( ((1,2), (3,4), (4,5)) )

它也有效......通常我会说好的,为什么不呢,我不知道它为什么有效。但是我必须为我的大学写一次考试,所以我必须知道我是否理解正确,或者它们是否意味着 2D Matrix 的其他含义?

谢谢你的帮助

4

2 回答 2

4

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

那么,一个 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
于 2015-10-27T10:32:42.320 回答
0

埃姆雷 的答案是正确的,但我仍然想解决 numpy 矩阵的使用问题,这可能是您困惑的根源。


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

  • Matrix实际上是一个ndarray子类:矩阵可以做的所有事情,ndarray都可以做到(反向不完全正确)。
  • 矩阵覆盖*和运算符,a和 a**之间的任何操作都会返回 a ,这对于某些算法来说是有问题的。Matrixndarraymatrix

更多关于这个 SO 帖子ndarray的vsmatrix辩论,特别是这个简短的回答


来自Numpy 文档

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

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

  • 矩阵对象总是二维的。这具有深远的影响,因为 m.ravel() 仍然是二维的(第一维为 1)并且项目选择返回二维对象,因此序列行为与数组根本不同。

  • 矩阵对象覆盖乘法为矩阵乘法。对于您可能想要接收矩阵的函数,请确保您了解这一点。特别是考虑到当 m 是矩阵时 asanyarray(m) 返回一个矩阵这一事实。

  • 矩阵对象覆盖幂以将矩阵提升为幂。关于在使用 asanyarray(...) 获取数组对象的函数中使用 power 的相同警告适用于这一事实。

  • 矩阵对象的默认__array_priority__值为 10.0,因此与 ndarray 的混合操作总是会产生矩阵。

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

于 2015-10-27T10:54:31.550 回答