连接两个大的numpy 2D数组

Exc*_*bur 3 python arrays numpy concatenation

我有两个大的numpy二维数组.一种形状是X1(1877055,1299),另一种是X2(1877055,1445).然后我用

X = np.hstack((X1, X2))
Run Code Online (Sandbox Code Playgroud)

将两个数组连接成一个更大的数组.但是,程序不会运行并退出代码-9.它没有显示任何错误消息.

问题是什么?如何连接这两个大的numpy 2D数组?

aba*_*ert 8

除非您的NumPy构建或操作系统出现问题(两者都不太可能),否则这几乎肯定是内存错误.

例如,假设所有这些值都是float64.所以,你已经为这两个数组分配了至少18GB和20GB,现在你正在尝试为连接数组分配另外38GB.但是你只有64GB的RAM和2GB的掉期.因此,没有足够的空间来分配另外38GB.在某些平台上,这种分配只会失败,希望NumPy能够抓住并提升一个MemoryError.在其他平台上,分配可能会成功,但只要您尝试实际触摸所有内存,就会出现段错误(请参阅linux中的overcommit处理示例).在其他平台上,系统将尝试自动扩展交换,但是如果你没有磁盘空间,它将是段错误.

无论是什么原因,如果你不能适应X1,X2并且同时X进入记忆,你能做什么呢?

  • 只需X在第一个位置构建,填充X1X2填充切片视图X.
  • 写入X1X2输出到磁盘,在磁盘上连接,然后重新读取它们.
  • 发送X1X2迭代读取它们的子进程并构建X然后继续工作.