连接两个大的numpy 2D数组

时间:2015-05-26 00:44:56

标签: python arrays numpy concatenation

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

X = np.hstack((X1, X2))

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

有什么问题?我怎样才能连接这两个大的numpy二维数组呢?

2 个答案:

答案 0 :(得分:8)

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

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

无论是什么原因,如果你不能同时将X1X2X放入记忆中,你可以做些什么呢?

  • 首先构建X,然后通过填写X1的切片视图填充X2X
  • X1X2写入磁盘,在磁盘上连接,然后重新读取。
  • X1X2发送到迭代读取它们并构建X的子流程,然后继续工作。

答案 1 :(得分:-3)

不是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]])