从两个数组创建numpy数组,使交替的索引包含来自不同数组的元素

6
我可以帮助您翻译关于IT技术的内容,以下是需要翻译的内容:

我正在寻求一种快速的方法来按下列方式合并两个Python中的Numpy数组。例如,如果我有以下两个数组:

arr1 = np.array([0.0, 1.0, 11.0, 111.0])
arr2 = np.array([0.5, 1.5, 11.5, 111.5])

如果我想要合并的数组(假设为arr3)包含arr1arr2中交替的元素索引,那么:

arr3 = np.array([0.0, 0.5, 1.0, 1.5, 11.0, 11.5, 111.0, 111.5]) 

我意识到可以使用两个for循环来实现,将arr1arr2的元素存储到交替的索引(arr3的索引)中。但是,在我的实际工作中,我将处理大型数组(arr1arr2),我希望确保我使用的方法是高效和快速的来实现这个功能(即创建arr3)。

非常感谢任何帮助。

2个回答

8

这是一种方法。追加或堆叠的方法效率低下,因为内存没有预先分配。当内存分配提前确定时,numpy 数组的操作效果最佳。

arr1 = np.array([0.0, 1.0, 11.0, 111.0])
arr2 = np.array([0.5, 1.5, 11.5, 111.5])

arr3 = np.zeros(arr1.shape[0] + arr2.shape[0], dtype=arr1.dtype)
arr3[::2] = arr1
arr3[1::2] = arr2

print(arr3)

[   0.     0.5    1.     1.5   11.    11.5  111.   111.5]

在我的设备上,大约比dstack + flatten方案快3倍,万岁! - Aubergine

4

以下是另一种方法:

In []:
np.dstack((arr1, arr2)).flatten()

Out[]:
array([  0. ,   0.5,   1. ,   1.5,  11. ,  11.5, 111. , 111.5])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接