我有一个数据集由以下组成(有限差分地下水流模型的头部值由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有快速的方法吗?
答案 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