假设你有3个形状为(3,)的数组,你想找到它们在不同维度上的乘积,结果是一个形状为(3,3,3)的数组。我知道你可以重塑它们,然后使用广播规则来找到产品。
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
a.reshape(1,1,-1)*b.reshape(1,-1,1)*c.reshape(-1,1,1)
字符串
是否有一个函数或方法来重塑数组以达到相同的结果?
我的解决方案:
d = [a,b,c,a,b,c] # arrays = 6
l = len(d) # n arrays
型
然后我创建一个n*n数组,所有的都是1,但对角线是负的,以设置形状(-1,1,1,1,1,1),(1,-1,1,1,1,1)等。
sh = (np.ones((l,l))-np.eye(l)*2).astype(int)
型
用形状压缩目标数组,然后索引结果列表以查找产品。在这种情况下,输出具有形状(3,3,3,3,3,3)。
z = [j.reshape(i) for i,j in zip(sh,d)]
z[0]*z[1]*z[2]*z[3]*z[4]*z[5]
型
我相信有一个更好的方法-有人能帮忙吗?
1条答案
按热度按时间xkrw2x1b1#
请注意,你计算的是
字符串
或
np.einsum('a,b,c',a,b,c)
。那是一样的。更常见的是以i开头,我不想造成混乱,也不想让人相信下标字符串与变量名有关如果这还不够自动化,您可以
型
然后呢
型