我有两个大的numpy 2D数组。一个形状为X1(1877055,1299),另一个为X2(1877055,1445)。然后我使用
X = np.hstack((X1, X2))
要将这两个数组连接成一个更大的数组。 但是,程序无法运行并退出,错误代码为-9,它没有显示任何错误消息。
问题是什么?我如何连接这两个大的numpy二维数组?
我有两个大的numpy 2D数组。一个形状为X1(1877055,1299),另一个为X2(1877055,1445)。然后我使用
X = np.hstack((X1, X2))
要将这两个数组连接成一个更大的数组。 但是,程序无法运行并退出,错误代码为-9,它没有显示任何错误消息。
问题是什么?我如何连接这两个大的numpy二维数组?
float64
。因此,您已经为这两个数组分配了至少18GB和20GB,并且现在正在尝试为连接的数组分配另外38GB。但是,您只有64GB的RAM加上2GB的交换空间。因此,没有足够的空间来分配另外38GB。在某些平台上,此分配将会失败,希望NumPy会捕获并引发MemoryError
。在其他平台上,分配可能会成功,但是一旦您尝试实际触摸所有该内存,您将会出现段错误(请参见Linux中的overcommit handling示例)。在其他平台上,系统将尝试自动扩展交换空间,但是如果您的磁盘空间不足,则会出现段错误。X1
,X2
和X
放入内存中,那么您可以做什么呢?
X
,然后通过填充X
的切片视图来填充X1
和X2
。X1
和X2
写入磁盘,连接它们,并重新读取。X1
和X2
发送到一个子进程中,该子进程会迭代地读取它们并构建X
,然后继续工作。虽然我不是numpy的专家,但为什么不使用numpy.concatenate()
呢?
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
例如:
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
X
大约为20GB,因此根据您的RAM情况,在最好的情况下这可能会非常缓慢。 - JohnEX1
、X2
和X
全部放入其中。(2)您正在使用64位Python,但实际内存不足以容纳它们所有。(3)您的NumPy安装已损坏。所以,首先,您是否在32位Python上?什么dtype
?您有多少内存?您是如何安装NumPy的,有哪个版本?还有什么平台? - abarnertX1.nbytes
和X2.nbytes
,这样我们就不必猜测你使用了多少内存。 - abarnert