Matlab-我创建了一个超过100,000行和3列的矩阵 我希望能够编写一个代码,该代码将遍历第三列中的值,如果它们超出指定范围,则将该值替换为它的邻居的平均值。我试图输入这个以查看我是否可以在矩阵中引用正确的值
run5((run5(:,3)>.002) | (run5(:,3)<0),3) = []
但我得到的只是 订阅的分配维度不匹配。
我不知道如何进行平均 任何帮助将不胜感激
前6行
-2.76800000000000 8.09400000000000 0.000894000000000000
-2.76800000000000 7.84400000000000 0.000929000000000000
-2.76800000000000 7.59400000000000 0.00101500000000000
-2.76800000000000 7.34400000000000 0.000747000000000000
-2.76800000000000 7.09400000000000 0.00103900000000000
-2.76800000000000 6.84400000000000 0.000888000000000000
-2.76800000000000 6.59400000000000 0.000828000000000000
-2.76800000000000 6.34400000000000 0.000737000000000000
-2.76800000000000 6.09400000000000 -0.000858000000000000
-2.76800000000000 5.84400000000000 0.000723000000000000
答案 0 :(得分:0)
您可以使用命令行工具awk执行此操作,但不确定您在问题中尝试使用的语言。这是你想要的吗?
awk '{if($3 > 0.002 || $3 < 0){ $3=$1+$2/2; print;} else print}' test.txt
答案 1 :(得分:0)
我猜你在Matlab中这样做了吗?如果是这样,请添加标签。也许这会有所帮助
> r = rand(100,3); % random input matrix
> i = r(:,3)>0.4 & r(:,3)<0.5; % row indices where 3rd column value between 0.4 and 0.5
> r(i,3)=0; % for those rows set the column three value to zero
> sum(r(:,3)==0) %count zeros
ans =
12
如果要根据相邻行修改值。您可以执行以下操作
> r = rand(100,3); % random input matrix
> i = r(:,3)>0.4 & r(:,3)<0.5; % row indices where 3rd column value between 0.4 and 0.5
> ind = find(i); % row index values
> r(ind,3) = r(ind-1,:) + r(ind+1,:); % sum of previous and next row
当然,您应该检查第一行和最后一行的边界条件。