我需要获得多重矩阵乘法的“W”矩阵(所有乘法都会产生列向量)。
from numpy import matrix
from numpy import transpose
from numpy import matmul
from numpy import dot
# Iterative matrix multiplication
def iterativeMultiplication(X, Y):
W = [] # Matrix of matricial products
X = matrix(X) # same number of rows
Y = matrix(Y) # same number of rows
h = 0
while (h < X.shape[1]):
W.append([])
W[h] = dot(transpose(X), Y) # using "dot" function
h += 1
return W
但是,出乎意料的是,我获得了具有各自数据类型的对象列表。
X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [2.,5.,4.]]
Y = [[-0.2], [1.1], [5.9], [12.3]] # Edit Y column
iterativeMultiplication( X, Y )
结果:
[array([[37.5],[73.3],[60.8]]),
array([[37.5],[73.3],[60.8]]),
array([[37.5],[73.3],[60.8]])]
我需要任何方法来获得矩阵转换的数值。
W = matrix(W) # Results in error
使用“matmul”功能是一样的。感谢你的时间。
答案 0 :(得分:0)
如果要堆叠多个矩阵,可以使用numpy.vstack
:
W = numpy.vstack(W)
编辑:您的功能,X和Y与您问题中的“结果”列表之间似乎存在差异。但根据您下面的评论,您实际需要的是numpy.hstack
(水平堆栈),它会根据您的“结果”列表为您提供所需的3x3矩阵。
W = numpy.hstack(W)
答案 1 :(得分:0)
当然你会得到一份清单。您将W
作为列表初始化,并将相同的计算附加到其中3次。
但是你的3个元素数组对这些数据array([[ 3.36877336],[ 3.97112615],[ 3.8092797 ]])
没有意义。
如果我制作Xm=np.matrix(X)
等,
In [162]: Xm
Out[162]:
matrix([[ 0., 0., 1.],
[ 1., 0., 0.],
[ 2., 2., 2.],
[ 2., 5., 4.]])
In [163]: Ym
Out[163]:
matrix([[ 0.1, -0.2],
[ 0.9, 1.1],
[ 6.2, 5.9],
[ 11.9, 12.3]])
In [164]: Xm.T.dot(Ym)
Out[164]:
matrix([[ 37.1, 37.5],
[ 71.9, 73.3],
[ 60.1, 60.8]])
In [165]: Xm.T*Ym # matrix interprets * as .dot
Out[165]:
matrix([[ 37.1, 37.5],
[ 71.9, 73.3],
[ 60.1, 60.8]])
您需要编辑问题,同时拥有有效的Python代码(缺少def
和:
)以及与输入匹配的结果。
===============
In [173]: Y = [[-0.2], [1.1], [5.9], [12.3]]
In [174]: Ym=np.matrix(Y)
Out[176]:
matrix([[ 37.5],
[ 73.3],
[ 60.8]])
=====================
这次迭代很笨拙:
h = 0
while (h < X.shape[1]):
W.append([])
W[h] = dot(transpose(X), Y) # using "dot" function
h += 1
更多Pythonic方法
for h in range(X.shape[1]):
W.append(np.dot(...))
甚至
W = [np.dot(....) for h in range(X.shape[1])]