[英]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
是标准矩阵乘法(与逐元素方式相反)。
从类似数组的对象或数据字符串中返回一个矩阵。 矩阵是专用的二维数组,可通过操作保留其二维性质。 它具有某些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)。
来自文档的创建示例:
>>> 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.