我有两个大的 numpy 二维数组。一种形状是 X1 (1877055, 1299),另一种形状是 X2 (1877055, 1445)。然后我用
X = np.hstack((X1, X2))
将两个数组连接成一个更大的数组。但是,程序不运行并退出,代码为-9。它没有显示任何错误消息。
问题是什么?如何连接这么大的两个 numpy 2D 数组?
除非您的 NumPy 构建或操作系统出现问题(两者都不太可能),否则这几乎肯定是内存错误。
例如,假设所有这些值都是float64
。因此,您已经为这两个数组分配了至少 18GB 和 20GB,现在您尝试为串联数组分配另外 38GB。但你只有 64GB 内存加上 2GB 交换空间。因此,没有足够的空间来分配另外 38GB。在某些平台上,这种分配只会失败,希望 NumPy 能够捕获并提高MemoryError
。在其他平台上,分配可能会成功,但是一旦您尝试实际接触所有内存,您就会出现段错误(请参阅过度使用处理 https://www.kernel.org/doc/Documentation/vm/overcommit-accounting以linux为例)。在其他平台上,系统将尝试自动扩展交换区,但如果磁盘空间不足,则会出现段错误。
不管什么原因,如果你不适合X1
, X2
, and X
同时进入内存,你能做什么呢?
- 只需构建
X
首先,并填写X1
and X2
通过填充切片视图X
.
- Write
X1
and X2
输出到磁盘,在磁盘上连接,然后将它们读回。
- Send
X1
and X2
到一个子进程,它迭代地读取它们并构建X
然后继续工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)