【问题标题】:MATLAB: Filter struct based on column valueMATLAB:根据列值过滤结构
【发布时间】:2018-07-25 05:01:32
【问题描述】:

我是 matlab 新手,太习惯于 python 并且很难找到一种过滤结构的方法,类似于我如何根据条件在 python 中过滤 pandas 数据帧。

Matlab

a = arrayfun(@(x) x.value ==10, Data);
Data_10 = Data(a);

在统一输出中使用 arrayfun 非标量时出错,在索引 1 处,输出 1. 将“UniformOutput”设置为 false。

我将如何在 python 中这样做:

Data_10 = Data[Data.value == 10]

【问题讨论】:

  • 为什么需要arrayfun? Data_10 = Data(Data.value == 10) 不做你想做的事吗?

标签: matlab


【解决方案1】:

试试这个:

Data_10 = zeros(size(Data.value));
Data_10(Data.value==10) == 10;

这应该将值 10 写入您的数组 Data_10 到每个位置,在 Data 中有一个 10,其余为 0。

我不确定我是否完全理解您的问题。这是我的理解:

您想过滤矩阵的某些值。

假设我们有一个充满值的矩阵 A。您想过滤小于 lowthresh = 0 和大于 upthresh = 5 的值。

A = [3 6 -2.4 1; 0 34 4.76 0.5; 84 3 2.32 4; 1 -1 2 3.99];
lowthresh = 0;
upthresh = 5;
A(A<lowthresh | A>upthresh) = NaN; % Nan is a good flag

输出:

A =

    3.0000       NaN       NaN    1.0000
         0       NaN    4.7600    0.5000
       NaN    3.0000    2.3200    4.0000
    1.0000       NaN    2.0000    3.9900

替换你的值后,你可以做一些忽略 NaN 的基本功能:

例如平均:

mean(A,'omitnan')

ans =

    1.3333    3.0000    3.0267    2.3725

我希望这能解决您的问题。请注意,您可以对任何返回布尔值 (isnan(), ... ) 的语句执行此操作,即使该布尔值与矩阵根本没有任何关系。

假设我们有 2 个大小相同但数字不同的矩阵:

A =

     1     1     0
     1     1     0
     0     0     0

B =

     0     0     0
     0     0     0
     0     0     0

我们可以很容易地说:

B(A==1) = 2

B =

     2     2     0
     2     2     0
     0     0     0

希望对你有帮助

干杯巴勃罗

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多