MATLAB:根据列值过滤结构

时间:2018-07-24 08:11:22

标签: matlab

我是Matlab的新手,也习惯于python,并且很难找到一种过滤结构的方法,类似于我可以根据条件在python中过滤熊猫数据框的方法。

Matlab

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

在均匀输出中使用arrayfun Non-scalar时出错,索引为1,输出   1.将“ UniformOutput”设置为false。

我将如何在python中这样做:

Data_10 = Data[Data.value == 10]

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

这应该将数组10中每个位置的值10写入到Data_10数组中,数据中的位置为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

我希望能有所帮助

为巴勃罗欢呼