2

我正在尝试使用 numpy,但我不知道如何n by n在 numpy 中正确定义矩阵。我用过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)

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

4

3 回答 3

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应该不是零矩阵,或者不需要转置操作。

于 2013-04-23T13:20:12.547 回答
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 矩阵的一般形式和转置的使用(这需要再考虑一分钟;-))

于 2013-04-23T13:00:53.267 回答
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]])
于 2013-04-23T15:18:01.957 回答