我有一个很大的多维数组,我希望它占用尽可能少的内存。在python中,这占用66 Mb。
m = np.zeros([1000, 70, 1, 1000], dtype='bool')
size = sys.getsizeof(m)/1024/1024
print("Size: %s MB" % size)
然而,在R中,相同的阵列占用的内存(267Mb)增加了4倍。
m <- array(FALSE, dim = c(1000, 70, 1, 1000))
format(object.size(m), units = "auto")
如何减少R中的数组大小?
编辑:
该数组将用作外部API中的X输入。此函数将数组或内部迭代器mx.io.arrayiter
作为参数。
答案 0 :(得分:4)
你断言这些数组是一样的显然是错误的。如果它们是相同的数组,那么你需要在R中使用与任何其他语言相同的内存分配。
来自?as.integer
的帮助:
请注意,R的当前实现使用32位整数作为整数向量
很明显4x内存的使用是因为你在R中使用32位对象,而在Python中使用的是8位对象。
要在R中使用8位对象,可以使用raw
向量。来自?as.raw
的帮助:
原始类型用于保存原始字节
试试这个:
m3 <- array(raw(0), dim = c(1000, 70, 1, 1000))
format(object.size(m3), units = "auto")
[1] "66.8 Mb"
这与您使用Python报告的值相同。