【问题标题】:Limiting large array to 1D in MATLAB在 MATLAB 中将大数组限制为一维
【发布时间】:2017-06-18 01:20:57
【问题描述】:

我正在使用 XShooter 数据和银河系校正,我在 MATLAB 中使用 ccm_unred。问题是

funred = flux*10.^(0.4*A_lambda);

这行代码生成了一个29686 X 29686 double 数组。我只想要它的一侧,我可以通过将funred 重新分配为funred = funred(:,1) 来做到这一点,但是这段代码也需要57 seconds 才能执行,并且占用了我的 CPU 和 RAM 太多,我的笔记本电脑无法保持稳定。有什么方法可以从一开始就将funred的生成限制为仅(:,1)

【问题讨论】:

    标签: matlab multidimensional-array large-data


    【解决方案1】:

    您说您的代码生成了一个 29686 X 29686 矩阵,但是您在等式中执行逐元素运算。这意味着fluxA_lambda 的胸围为 29686 X 29686。只需将那个大小的切片切片!

    假设其中一个是 29686 X 29686

    funred = flux(:,1)*10.^(0.4*A_lambda(:,1));
    

    只需删除不是矩阵的(:,1)

    如果他们两个都是 matices,那么你不能这样做,因为flux*... 需要整个矩阵来操作。

    【讨论】:

    • 那里有一个矩阵操作,所以虽然我同意如果你只有 1 个矩阵,这可行,但我认为在它们都是矩阵的情况下这是不正确的。如果两者都是矩阵,我认为您将需要funred = flux*10.^(0.4*A_lambda(:,1))
    • @AnderBiguri 非常感谢。问题是A_lambda,我在代码中有两行funred,我担心会发生什么。时间消耗现在是0.8 seconds :-)
    • @DennisJaheruddin 是的,通量已经只有 29686 X 1,但我没有在问题中指出这一点是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多