繁体   English   中英

在numpy中定义和乘法矩阵(python)

[英]Defining and Multiplying matrices in numpy (python)

我正在尝试使用numpy,我不知道如何正确地定义numpy中的n by n矩阵。 我已经使用了numpy.zeros(n,n) ...但我不确定是否可以。

这样使用numpy是否正确? 我正在尝试获取(matrix^T * vector) - vector

matrix = np.zeros((n,n))
start =  [(1/float(n)) for _ in range(n)]
vector = np.array(start)
newvector = np.dot(np.transpose(matrix) , vector)
ans=  np.subtract(newvector , vector)

我问这个问题是因为我得到了错误的结果,而且我不确定我的问题在哪里

要在numpy定义一个矩阵,您有几种选择:

  • numpy.zeros定义一个由零填充的矩阵。
  • numpy.ones定义一个填充有1的矩阵。
  • numpy.array基于其他内容(例如列表)定义矩阵
  • numpy.empty定义了一个矩阵,但没有numpy.empty分配值(因此,它包含内存中当前所分配的内容)。

所有这些函数都将具有矩阵尺寸的元组用作第一个参数。 这就是括号加倍的原因。

使用numpy ,您可以使用任何常规的运算符(+,-,* /,**),它们是逐元素执行的。

要执行矩阵乘法,您需要使用numpy.dot函数。

然后,您可以充当以下角色:

n = 10
matrix = numpy.zeros((n,n))
vector =  numpy.ones(n) / n
newvector = numpy.dot(matrix.T, vector)
ans = newvector - vector

但是我想matrix应该不是零矩阵,否则不需要转置运算。

基本上,您正确使用numpy的方式。 为了简化用法,我将以其他方式编写起始向量,并使用对象方法来计算所需的值。

n = 10

matrix = np.zeros((n, n))
vector = np.ones((n,)) * 1.0/n
new_vector = matrix.T.dot(vector)
ans = new_vector - vector

print ans

>>> [-0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1]

输出应该是正确的(矩阵乘以向量应该是一个全为零的向量减去一个除以十的值,瞧)。 我不太确定NxM矩阵的一般形式和转置的用法(这需要花一分钟的时间来考虑;-))

除了@CharlesBrunet的答案外,还有一个专门用于数学矩阵的类,其中A*B是标准矩阵乘法(与逐元素方式相反)。

numpy.matrix

从类似数组的对象或数据字符串中返回一个矩阵。 矩阵是专用的二维数组,可通过操作保留其二维性质。 它具有某些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)。

来自文档的创建示例:

>>> a = numpy.matrix('1 2; 3 4')
>>> print a
[[1 2]
 [3 4]]
>>> numpy.matrix([[1, 2], [3, 4]])
matrix([[1, 2],
        [3, 4]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM