在matlab中查找并匹配数组中同一行中的多个值

时间:2016-06-10 15:25:06

标签: matlab find row

我有一个数据集由以下组成(有限差分地下水流模型的头部值由200行,200列和5层组成)

, "id", "k", "i", "j", "f", "Active"
1, 1, 1, 1, 1, 313, 0
2, 2, 1, 1, 2, 315.2.0, 0
3, 3, 1, 1, 3, 301.24, 0
4, 4, 1, 1, 4, 306.05, 0
5, 5, 1, 1, 5, -999.0, 0
6, 6, 1, 1, 6, -999.0, 0
7, 7, 1, 1, 7, 310.57, 0
8, 8, 1, 1, 8, -999.0, 0
9, 9, 1, 1, 9, -999.0, 0
.
.
.
200000, 200000, 5, 200, 200, -999.0, 0

让我们假设我需要找到具有特定i,j,k的行
例如我想找到i = 100,j = 50,k = 3的行来存储多个i,j,k的值f
我尝试使用find,但它只找到特定项目的位置 我知道可以使用for & if来完成,但这需要时间
使用matlab有快速的方法吗?

2 个答案:

答案 0 :(得分:0)

假设您的文本文件包含以下数据

"id", "k", "i", "j", "f", "Active"
1, 1, 1, 1, 313, 0
2, 1, 1, 2, 315.2.0, 0
3, 1, 1, 3, 301.24, 0
4, 1, 1, 4, 306.05, 0
5, 1, 1, 5, -999.0, 0
6, 1, 1, 6, -999.0, 0
7, 1, 1, 7, 310.57, 0
8, 1, 1, 8, -999.0, 0
9, 1, 1, 9, -999.0, 0

首先通过

阅读文件
>> fileID = fopen('testfileaccess.txt');
>> C = textscan(fileID,'%s %s %s %s %s %s','Delimiter',',')

您将获得代表每列的6个单元格

C = 

  Columns 1 through 5

    {10x1 cell}    {10x1 cell}    {10x1 cell}    {10x1 cell}    {10x1 cell}

  Column 6

    {10x1 cell}

>> Matrix= [str2double(C{2}).';str2double(C{3}).';str2double(C{4}).';].'

上述代码将导致i j和k在矩阵中,每行代表每个变量

Matrix =

   NaN   NaN   NaN
     1     1     1
     1     1     2
     1     1     3
     1     1     4
     1     1     5
     1     1     6
     1     1     7
     1     1     8
     1     1     9

然后如果你想找到例如k = 1,i = 1和j = 8你使用find()

find(Matrix(:,1) == 1 & Matrix(:,2) == 1 & Matrix(:,3) == 8)

并且你有它

ans =

     8

第8行

答案 1 :(得分:0)

row = jcount*kcount*(i-1) + kcount*(j-1) + k

在你的情况下:

row = 200*5*(i-1) + 5*(j-1) + k