用numpy(python)定义和相乘矩阵
我正在尝试使用numpy,但我不知道如何在numpy中正确定义用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
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
,这与您发布的代码一致。请给出你的代码的结果和你期望的结果!我看不出有什么问题,代码似乎还可以