将数字表示为8位对象

时间:2016-08-29 09:33:29

标签: r memory

我有一个很大的多维数组,我希望它占用尽可能少的内存。在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作为参数。

1 个答案:

答案 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报告的值相同。