我有一个X矩阵,它的形状是(ni*43*91)x67,W张量的形状是67x43x91。ni变化
我需要得到一个(ni*43*91)向量y,方法是在X的第一行ni上加上W的第一列,得到y的第一个ni元素,X的第二个ni行,得到y的第二个ni元素,依此类推。当W中的列用完时,我转到下一个维度继续。在
我有两个面具dim2和dim3,都是形状(ni*43*91),按顺序排列。现在这就是我正在做的(简化),而且速度很慢
for d3 in range(91):
for d2 in range(43):
mask = ((dim3 == d3) & (dim2 == d2))
curr_X = X[mask, :]
curr_W = W[:,d2,d3]
curr_y = numpy.dot(curr_X,curr_W)
y[mask] = curr_y
在没有for循环的情况下,这是可能的吗?在
首先,不清楚您想做什么,因为您的代码不起作用。我只能猜测你想这么做:
如果您只需将
A,B,C,ni
设置为一些较低的值并取消对print
-行的注释,您将很快看到该算法的作用。在如果这正是您想要的,那么您可以使用这一行程序更快地完成:
^{pr2}$尽管有一些索引重新排列,这里的关键技巧是使用
repeat
,因为在循环中,b,c
为ni
步骤“冻结”,而k
在增长。在我现在有点赶时间,但如果你需要进一步的解释,请留言。在
我不完全理解您的
dim2
和dim3
数组是什么,以及mask
是如何构造的,但是根据您的描述,您需要与此类似的内容:如果您使用工作代码更新问题,即
dim2
和dim3
的完整描述,我们可以对其进行微调以返回完全相同的结果(如果还没有)。在从这个问题中很难理解你想要的结果是什么,但我认为你所追求的结果可以很容易地得到,就像这样:
比较正确性和速度:
^{pr2}$再快一点就可以用了
相关问题 更多 >
编程相关推荐