替换矩阵元素Matlab

时间:2015-06-17 17:58:37

标签: matlab matrix

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

2 个答案:

答案 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

当然,您应该检查第一行和最后一行的边界条件。