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数组?
除非您的NumPy构建或操作系统出现问题(两者都不太可能),否则这几乎肯定是内存错误.
例如,假设所有这些值都是float64
.所以,你已经为这两个数组分配了至少18GB和20GB,现在你正在尝试为连接数组分配另外38GB.但是你只有64GB的RAM和2GB的掉期.因此,没有足够的空间来分配另外38GB.在某些平台上,这种分配只会失败,希望NumPy能够抓住并提升一个MemoryError
.在其他平台上,分配可能会成功,但只要您尝试实际触摸所有内存,就会出现段错误(请参阅linux中的overcommit处理示例).在其他平台上,系统将尝试自动扩展交换,但是如果你没有磁盘空间,它将是段错误.
无论是什么原因,如果你不能适应X1
,X2
并且同时X
进入记忆,你能做什么呢?
X
在第一个位置构建,填充X1
并X2
填充切片视图X
.X1
和X2
输出到磁盘,在磁盘上连接,然后重新读取它们.X1
和X2
迭代读取它们的子进程并构建X
然后继续工作.