数组可以容纳在可用的RAM中,但是在调用numpy.take时仍然会发生内存错误

时间:2018-12-06 17:23:05

标签: numpy

我有三个形状为(1029,1146,8,5)的数组。它们是H4rowOffsetscolOffsets。 H4是float32,而其他两个是int。假设每个元素数组4个字节,H4的开销为188.7 MB。

我的机器共有32 GB RAM,目前有18 GB。我使用platform.architecture()来验证Python解释器是64位的,以便RAM应该可用。

似乎我还没有达到内存限制,但是运行以下命令时出现内存错误:

shifted=np.take(H4,rowOffsets,0,mode='clip').

我通过使用更大的输入(3000,3000,8,5)直到Take调用运行代码来进一步测试了这一点。这消耗了7倍的内存,但直到Take调用之后才引起内存错误。

所以我认为我使用的是错误的,它有一个错误,或者它在执行时会消耗大量的内存。任何人都可以帮助澄清这里发生的事情吗?

1 个答案:

答案 0 :(得分:1)

使用多维参数,# classes size mean # 1 a 2 1.5 # 2 b 1 2.0 # 3 c 1 1.0 会为data.frame(classes = df[,"classes"], size = rowSums(df[, names(df) != "classes"]>0, na.rm = TRUE), mean = rowMeans(df[, names(df) != "classes"], na.rm = TRUE)) # classes size mean # 1 a 2 1.5 # 2 b 1 2.0 # 3 c 1 1.0 中的每个条目获取take维度之外的所有维度的完整切片。因此,您使用它的方式将是axis,这很多而且可以解释您的内存问题。

您可能想改用indices