首先,您不能将作业放在列表理解中。
其次:你很幸运,因为当你减去它们时Vjunk
很V
容易广播。这是一个使用非平凡形状的示例,可以更容易地发现错误:
import numpy as np
Vjunk = np.random.rand(2, 3, 4, 5)
V = np.random.rand(4, 5)
# naive version: loop
res1 = Vjunk.copy()
for i in range(2):
for j in range(3):
for l in range(4):
for m in range(5):
res1[i,j,l,m] -= V[l,m]
# vectorized, broadcasting version:
res2 = Vjunk - V
print(np.array_equal(res1, res2))
# True
这里Vjunk
有形(2, 3, 4, 5)
,V
有形(4, 5)
。后者与(1, 1, 4, 5)
用于广播目的的形状兼容,然后与 的形状兼容Vjunk
。
执行广播减法Vjunk - V
将完全按照您的要求进行:对于沿最后两个维度的每个元素Vjunk
(沿其前两个维度的二维数组)的每个值将减少V
.
然后加入一个标量因子是微不足道的:
res = Vjunk - beta * V