我正在尝试使用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)
我问这个是因为我得到了错误的结果,我不确定我的问题在哪里
答案 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
是标准矩阵乘法(与元素相反)。
从类似数组的对象或数据字符串返回矩阵。矩阵是一种专用的二维阵列,通过操作保留其二维特性。它有一些特殊的运算符,如*(矩阵乘法)和**(矩阵幂)。
来自文档的创建示例:
>>> a = numpy.matrix('1 2; 3 4')
>>> print a
[[1 2]
[3 4]]
>>> numpy.matrix([[1, 2], [3, 4]])
matrix([[1, 2],
[3, 4]])