我是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]
答案 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
我希望能有所帮助
为巴勃罗欢呼