我有三个形状为(1029,1146,8,5)
的数组。它们是H4
,rowOffsets
和colOffsets
。 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调用之后才引起内存错误。
所以我认为我使用的是错误的,它有一个错误,或者它在执行时会消耗大量的内存。任何人都可以帮助澄清这里发生的事情吗?
答案 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
。