我有两个形状的数组:
A = (32,512,640)
B = (4,512)
我需要把A和B相乘,这样我就得到一个新的n数组:
C = (4,32,512,640)
另一种方法是,向量B的每一行沿着A的轴=-2相乘,结果得到一个新的1,32512640立方体。B的每一行可以循环形成123512640个立方体,然后可以使用np.concatenate
或np.vstack
来构建C,例如:
# 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
这样的方法将这些向量化到一行中。我还在学习如何使用这两种方法,所以我不确定这是否合适。你知道吗
谢谢!你知道吗
在用^{} 扩展} -
B
的维数之后,我们可以利用^{有了^{} ,它将是-
这里没有求和,所以
einsum
不会比explicit-broadcasting
好。但既然我们正在寻找Pythonic的解决方案,一旦我们超越了它的字符串表示法,就可以使用它。你知道吗我们找点时间把事情做完-
杠杆
multi-core
我们可以利用multi-core capability of ^{} ,它适合于
arithmetic operations
和large data
,从而在这里获得一些性能提升。让我们慢慢来-在一行中为:
ne.evaluate('A*B4D',{'A':A,'B4D' :B[:,None,:,None]})
。你知道吗^{} 关于如何控制多核功能。你知道吗
相关问题 更多 >
编程相关推荐