【问题标题】:Change default numeric type to float in matlab在matlab中将默认数字类型更改为浮点数
【发布时间】:2015-06-24 18:55:28
【问题描述】:

Matlab 默认使用 double 作为数值类型。我正在训练 GMM 并且内存不足,所以我想将默认数字类型更改为浮点数,它将一半的内存变为两倍。有可能吗?

我知道 single(A) 将双精度元素 A 转换为单精度,但我们需要先为内存不足的 A 分配双精度存储。另外,我不能在所有矩阵分配中使用single(),因为许多工具箱中的各种函数都被调用,我无法手动更改。

那么有没有办法调用zeros(n) 会默认分配一个浮点矩阵而不是双精度?

【问题讨论】:

    标签: matlab memory


    【解决方案1】:

    不,目前无法将默认数字类型更改为float / single。在 MathWorks 论坛上查看这些信息丰富的帖子:

    另外,在我引用的第一个链接中引用 John D'Errico - 一位强大而传奇的 MATLAB 专家:

    这在 MATLAB 中是不可能的。无论如何,在single 工作很少是一个好主意。无论如何,它实际上在许多情况下都比较慢。与精度损失的风险相比,节省的内存几乎不值得。如果绝对必须,请仅在最大的数组上使用 single

    因此,如果您使用如此多的内存,您可能应该考虑重新制定您的算法。如果您要求解的线性系统非常大且零系数很多,请考虑使用sparse 来减少内存需求。


    除此之外,这样做会很危险,因为其他工具箱中的函数可能依赖于假设矩阵的double 类型分配这一事实,并且自发地将这些更改为single 可能会产生意想不到的后果。

    【讨论】:

      【解决方案2】:

      正如@rayryeng 所说,MATLAB 中无法“将默认数值类型”“更改为single”。我什至不完全确定这意味着什么。

      不过,您也提出了一个具体问题:

      那么有没有办法调用zeros(n) 会默认分配一个浮点矩阵而不是双精度?

      是的 - 您可以使用zeros(n, 'single')。这将为您提供single 类型的零数组。 zeros(n) 只是 zeros(n, 'double') 的简写,您也可以要求提供任何其他想要的数字类型,例如 uint8int64onesrandrandnNaNinfeye等其他数组创建函数也支持类似的语法。

      请注意,对 single 类型的数组执行的操作可能并不总是返回 single 类型的输出(因此您可能需要随后将它们转换为 single),并且它们可能使用不属于输入single(因此您可能并不总能获得您希望的所有内存优势)。例如,Image Processing Toolbox 中的许多函数将接受 single 类型的输入,但随后会在内部转换为 double 以执行操作。 Statistics Toolbox 中拟合 GM 模型的函数似乎确实接受 single 类型的输入,但我不知道它们在内部做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 2014-07-31
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多