用numpy(python)定义和相乘矩阵

用numpy(python)定义和相乘矩阵,python,numpy,Python,Numpy,我正在尝试使用numpy,但我不知道如何在numpy中正确定义n乘n矩阵。 我使用了numpy.zero(n,n)。。。但我不确定它是否合适 像这样使用numpy正确吗? 我正在尝试获取(矩阵^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) , ve

我正在尝试使用numpy,但我不知道如何在numpy中正确定义
n乘n
矩阵。 我使用了
numpy.zero(n,n)
。。。但我不确定它是否合适

像这样使用numpy正确吗? 我正在尝试获取
(矩阵^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。为了简化使用,我将以不同的方式编写开始向量,并使用对象方法来计算所需的值

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]

输出应该是正确的(矩阵乘以向量应该是一个充满0减去1除以10的向量,瞧)。我不太确定NxM矩阵的一般形式和转置的用法(这需要再花一分钟来考虑;-)

基本上你是正确的使用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]

输出应该是正确的(矩阵乘以向量应该是一个充满0减去1除以10的向量,瞧)。我不太清楚NxM矩阵的一般形式和转置的用法(这需要再花一分钟来考虑;-)

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

  • numpy.zeros
    定义了一个用零填充的矩阵
  • numpy.ones
    定义了一个矩阵,其中填充了一个
  • 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

但是我认为
矩阵
应该不是一个由零组成的矩阵,或者不需要转置操作。

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

  • numpy.zeros
    定义了一个用零填充的矩阵
  • numpy.ones
    定义了一个矩阵,其中填充了一个
  • 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

但是我认为
矩阵
应该不是一个由零组成的矩阵,或者不需要转置运算。

除了@CharlesBrunet的答案之外,还有一个数学矩阵的特殊类,
a*B
是标准矩阵乘法(与元素乘法相反)

从类似数组的对象或数据字符串返回矩阵。矩阵是一种特殊的二维数组,通过运算保持其二维性质。它有一些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)

文档中的创建示例:

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

除了@CharlesBrunet给出的答案外,还有一个专门的数学矩阵类,
a*B
是标准矩阵乘法(与元素乘法相反)

从类似数组的对象或数据字符串返回矩阵。矩阵是一种特殊的二维数组,通过运算保持其二维性质。它有一些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)

文档中的创建示例:

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

如果你用一个零矩阵乘以任何向量,你就会得到一个零向量。因此,我假设
ans
的条目都等于
-1/n
,这与您发布的代码一致。请给出你的代码的结果和你期望的结果!我看不出有什么问题,代码看起来是OK的,如果你用一个零矩阵乘以任何向量,你会得到一个空向量。因此,我假设
ans
的条目都等于
-1/n
,这与您发布的代码一致。请给出你的代码的结果和你期望的结果!我看不出有什么问题,代码似乎还可以