【发布时间】:2018-02-05 07:33:00
【问题描述】:
我有三个矩阵 W H 和 V。我想得到keep,它存储V的所有列和W的每一列之间的元素乘法,并逐行求和。
(V 有 6 行,W 也有 6 行。W 的每一列(有 6 个元素)乘以 Vcolumn 的 每一列 的 6 个元素-按列。然后按行对结果求和)
W = np.random.randint(4,6, size=(6, 4))
H = np.random.randint(1,3, size=(4, 5))
V = np.dot(W,H) + 1
keep = np.array([]).reshape(0,6)
print W
>>[[4 4 5 5]
[4 4 4 4]
[4 5 5 4]
[4 5 5 5]
[5 4 4 5]
[5 4 4 5]]
print V
>>[[28 33 32 37 24]
[25 29 29 33 21]
[28 33 33 37 24]
[30 35 34 39 25]
[28 32 32 37 23]
[28 32 32 37 23]]
# I want the result from only two from four rows of W
group = 2
for k in xrange(group):
# multiply all of each column of V by k-th column of W and sum in row
keep = np.vstack([keep, sum(V[:,:].T*W[:,k])])
print keep, keep.shape
>>[[ 616. 548. 620. 652. 760. 760.]
[ 616. 548. 775. 815. 608. 608.]] (2L, 6L)
我想知道这可以在没有for 循环的情况下完成吗?就像sum(V[:,:].T*W[:,0:1] 虽然,我认为这是不可能的,因为W 的每一列都必须逐步乘以矩阵V,我相信有人有更好的想法(或确认它不能)。
我尽量避免for 循环,因为这是长算法的一部分,我希望当group 达到数百个时它可以超快。
【问题讨论】:
标签: python python-2.7 numpy matrix vectorization