我设置了两个表。
表1 = [0,1,2,3,4,5]
表2 = [554,543,554,544,564,553]
我想做的就是以下几点:
(1)我想取表1中的值,读取它,然后用表2中相同的索引识别它。
所以例如Table1 [0] = 0,因此我们会发现Table2 [Table1 [0]] = 554
(2)从表1的给定值开始,我想通过表2的全部内容,并附加数据首先小于A = 541或大于B = 553的值,并相应地将相应的值存储在不同的表中。
当我读取Table1时,我从Table1 [0] = 0开始,然后继续将此0作为Table2的索引,继续读取Table2的全部内容,只要表2中的值为< ; A或> B.
例如,从表1 [1] = 1 - >开始;然后我将继续读出表2 [1]之后的所有值:表2 [2] = 554,......等。在这种情况下,表2 [1]之后的第一个值是554,其> B所以我将它附加到另一个表并继续运行,下一个值Table2 [3] = 544既不大于B也不小于A所以我忽略并继续等等。
我的代码如下,但不确定出了什么问题。我正在使用Igor环境,但代码几乎像C ++一样可读:
Function Trial(Data1, Data2)
//Waves are just the tables that contain the data. Data1 = Table1, Data2 = Table2
Wave Data1
Wave Data2
Variable A = 541;
Variable B = 553;
Variable i, j, k
Variable XScale, Invalid
Variable numPoints = numpnts(Data1) //Number of Points in the array
Variable numPoints2 = numpnts(Data2)
for(i=0; i<numPoints; i+=1)
XScale = Data1[i]
Wave TrialCrossingA, TrialCrossingB
Make /N=(numPoints2)/O TrialCrossingA, TrialCrossingB
//Makes new tables to append required values
for(j=Xscale; j<numPoints2; j+=1)
If(Data2[j] <= Xa)
TrialCrossingA[i] = XScale
Elseif(Data2[j] >= Xb)
TrialCrossingB[i] = XScale
Endif
endfor
endfor
End
答案 0 :(得分:0)
我认为你在这里犯了一个错误,
for(j=Xscale; j<numPoints2; j+=1)
If(Data2[j] <= Xa) // This is supposed to be Data2 I guess ?
TrialCrossingA[i] = XScale
Elseif(Data2[j] >= Xb) // This is supposed to be Data2 I guess ?
TrialCrossingB[i] = XScale
Endif
endfor