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

时间:2013-04-23 12:33:33

标签: python numpy

我正在尝试使用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)

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

3 个答案:

答案 0 :(得分:2)

要在numpy中定义矩阵,您有以下几种选择:

  • numpy.zeros定义了一个用零填充的矩阵。
  • numpy.ones定义了一个用1填充的矩阵。
  • numpy.array定义基于其他内容的矩阵(例如,列表)
  • 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应该不是零的矩阵,或者不需要转置操作。

答案 1 :(得分:1)

基本上你是对的,你如何使用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矩阵的一般形式和转置的使用(需要另外一分钟思考;-))

答案 2 :(得分:1)

除了@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]])