我有两个形状的ndarray:
A = (32,512,640)
B = (4,512)
我需要将 A 和 B 相乘以获得新的 ndarray:
C = (4,32,512,640)
另一种思考方式是,向量 B 的每一行沿 A 的轴 =-2 相乘,得到一个新的 1,32,512,640 立方体。B 的每一行可以循环形成 1,32,512,640 个立方体,然后可以使用np.concatenate
or来构建 C np.vstack
,例如:
# Sample inputs, where the dimensions aren't necessarily known
a = np.arange(32*512*465, dtype='f4').reshape((32,512,465))
b = np.ones((4,512), dtype='f4')
# Using a loop
d = []
for row in b:
d.append(np.expand_dims(row[None,:,None]*a, axis=0))
# Or using list comprehension
d = [np.expand_dims(row[None,:,None]*a,axis=0) for row in b]
# Stacking the final list
result = np.vstack(d)
但是我想知道是否可以使用类似的东西np.einsum
或np.tensordot
将其全部矢量化在一行中。我还在学习如何使用这两种方法,所以我不确定这里是否合适。
谢谢!