【问题标题】:Avoid Matlab Loop for adding value避免使用 Matlab 循环来增加价值
【发布时间】:2021-10-28 09:09:54
【问题描述】:

我想避免在我的代码中使用 for 循环,因为它的计算量非常大。

我在我的数据框中搜索变量,如果变量为 0,则应将 1000 添加到另一个变量。 如果变量为 1,则相同。

for i=1:height(dataframe)
if df.status(i) ==0
    df.Number(i) = df.Number(i)+10000;
else if df.status(i) ==1
        df.Number(i) = df.Number(i)+20000;
    end
end
end

我非常感谢任何建议- 蒂姆

【问题讨论】:

  • 如果status 是一个布尔值,你可以执行df.Number += 10000; df.Number(df.status == 1) += 10000 之类的操作。

标签: matlab


【解决方案1】:

假设您的循环访问df.Numberdf.status 中的每个元素的大小也是相同的,那么您可以将您的代码总结为

df.Number = df.Number + 10000 + (df.status==1) * 10000;

MATLAB 中的逻辑值(布尔值)始终具有 0 或 1 的值,比较 status==1 可确保逻辑值。

如果df.status 是一个逻辑,您可以跳过比较:10000 + df.status * 10000

【讨论】:

    【解决方案2】:

    我不知道数据框的数据类型,但您可以通过在达到该条件时获取索引来解决此问题。

    % Generate a simple dataframe
    dataframe = [0 0 1 1 2 2 1 0 5]';
    
    % Get 0s index and add 10,000 to those indexes
    idx_0 = dataframe == 0;
    dataframe(idx_0) = dataframe(idx_0) + 10000;
    % Get 1s index and add 20,000 to those indexes
    idx_1 = dataframe == 1;
    dataframe(idx_1) = dataframe(idx_1) + 20000; 
      
    % Print dataframe variable
    dataframe
    

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2023-03-27
      • 2021-12-01
      相关资源
      最近更新 更多