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

问题描述 投票:1回答:1

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

一个解决方案是将数组2复制为第一个数组的大小(除了所有暗点以外,还有一个),然后进行连接。但是,如果可以在加入/合并期间以广播方式进行复制,则它将使用更少的内存。

有关如何提高效率的任何建议?

设置:

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得到

python numpy
1个回答
0
投票

尝试一下

>>> 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)))
© www.soinside.com 2019 - 2024. All rights reserved.