我正在开发一个需要处理相对较大的数据集(多TB)的项目,并希望知道以下问题的答案,以便做出适当的架构和设计决策(即主要是关于数据集的拆分) ):
有没有硬性限制?是否可以在执行期间确定动态限制? (即取决于内存可用性?)。
这些限制是否取决于架构? (例如64比32比特)。我对64位系统(Windows和Linux)的答案特别感兴趣。
我找不到涵盖上述问题的好参考,所以任何指针都会非常感激!
谢谢!
答案 0 :(得分:3)
This page根据向量的平台和体系结构给出最大尺寸。看起来它们不是硬限制,而是最适合操作系统和其他服务的内存。我认为细胞有相似的限制,如果不是相同的话。
答案 1 :(得分:1)
数组中元素的总数由每个维度的大小的乘积给出。 David的答案中的链接告诉您实际双精度数组中可容纳的最大元素数。您感兴趣的nD
数组相当于具有相同元素数的重新整形的1D
向量。
因此,您可以根据需要混合和匹配元素数量并创建任意数量的维度,但需遵守以下约束条件。
#i ∈ {1,2,..., M}
,M
是最大可能的元素数,#i
是维度i
的大小∏#i=M
i ∈ {1,2,..., M}
(虽然这是前两个,我以为我会陈述它)例如,在我的机器上M ≈ 2^30
。
a=randn(2^30,1);%# create a column vector with 2^30 rows
a=reshape(a,2,2^29);%# reshape it into a 2D matrix with 2 rows and 2^29 columns
a=reshape(a,2*ones(30,1)');%# reshape it into a 30D array with 2 elements in each dimension
因此,非单一维度的最大数量的硬上限将为log2(M)
,因为增加维度的大小会减少维度的数量。