Python/Numpy广播两个数组之间的连接



问题是如何在这种情况下更有效地连接两个数组-有一个形状为(N,M,1(的numpy数组一和形状为(M,F(的数组二。需要将第二个数组与第一个数组连接,以创建形状为(N,M,F+1(的数组。第二个阵列的元素将沿着N.广播

一种解决方案是复制阵列2,使其具有第一个(沿除一个以外的所有dim(的大小,然后连接。但是,如果复制可以在join/concat期间作为广播来完成,那么它将使用更少的内存。

关于如何提高效率,有什么建议吗?

设置:

import numpy as np 
arr1 = np.random.randint(0,10,(5,10))
arr1 = np.expand_dims(arr1, axis=-1) #(5,10, 1)
arr2 = np.random.randint(0,4,(10,15)) 
arr2 = np.expand_dims(arr2, axis=0) #(1, 10, 15)
arr2_2 = arr2
for i in range(len(arr1)-1):
arr2_2 = np.concatenate([arr2_2, arr2],axis=0)
arr2_2.shape #(5, 10, 15)
np.concatenate([arr1, arr2_2],axis=-1) # (5, 10, 16) -> correct end result

加入arr1和arr2以获得

尝试这个

>>> a = np.random.randint(0, 10, (5, 10))
>>> b = np.random.randint(0, 4, (10, 15))
>>> c = np.dstack((a[:, :, np.newaxis], np.broadcast_to(b, (a.shape[0], *b.shape))))
>>> a.shape, b.shape, c.shape
((5, 10), (10, 15), (5, 10, 16)))

最新更新