【问题标题】:How to select particular datalist from a bigger list如何从更大的列表中选择特定的数据列表
【发布时间】:2013-06-27 05:39:41
【问题描述】:

我有一个名为 output2.txt 的数据文件,它有两列数据,每列数据由一个空行分隔。

在下面的 sn-p 中,我选择了一个介于 55 -68 之间的特定数据集,但我想将整个数据集放入循环中直到文件末尾...并进行拟合

我是一周前开始接触 Mathematica 的新手,请在这方面提供一些意见...

SetDirectory["C:\Users\\nanosims\\Desktop\\Al_output ap_1\\Al_output \ap_1"]

B = ReadList["output2.txt", {Real, Real}]'

some = Part[B, 55 ;; 68]'

g[x_] = a + b*Exp[-c*x] + d*Exp[-e*x] + f*Exp[-h*x] + i*Exp[-j*x] /. 
FindFit[some, 
 a + b*Exp[-c*x] + d*Exp[-e*x] + f*Exp[-h*x] + i*Exp[-j*x], {a, b, 
 c, d, e, f, h, i, j}, x]'

.....

例如数据集如下:

0.000000 4866.000000 0.003400 4694.000000 0.006800 4607.000000 0.017000 4463.000000 0.027000 4404.000000 0.034000 4393.000000 0.000000 4637.000000 0.003400 4445.000000 0.006800 4343.000000 0.017000 4151.000000 0.027000 4038.000000 0.034000 3984.000000 0.068000 3881.000000 0.000000 4258.000000 0.003400 4045.000000 0.006800 3930.000000 0.017000 3706.000000 0.027000 3560.000000 0.034000 3482.000000 0.068000 3239.000000 0.170000 3028.000000 0.000000 3943.000000 0.003400 3720.000000 0.006800 3601.000000 0.017000 3363.000000 0.027000 3207.000000 0.034000 3119.000000 0.068000 2839.000000 0.170000 2482.000000 0.270000 2357.400000 0.340000 2334.900000 0.000000 3637.000000 0.003400 3411.000000 0.006800 3287.000000 0.017000 3042.000000 0.027000 2879.000000 0.034000 2789.000000 0.068000 2495.000000 0.170000 2088.500000 0.270000 1903.400000 0.340000 1822.800000 0.680000 1682.900000 0.000000 3288.000000 0.003400 3063.000000 0.006800 2936.000000 0.017000 2689.000000 0.027000 2523.000000 0.034000 2429.000000 0.068000 2128.900000 0.170000 1706.400000 0.270000 1502.200000 0.340000 1407.100000 0.680000 1160.500000 1.700000 986.000000 0.000000 3087.000000 0.003400 2860.000000 0.006800 2735.000000 0.017000 2487.000000 0.027000 2320.000000 0.034000 2228.000000 0.068000 1923.200000 0.170000 1498.000000 0.270000 1293.000000 0.340000 1196.900000 0.680000 939.600000 1.700000 696.100000 2.700000 626.900000 3.400000 615.400000 0.000000 6640.000000 0.003400 5961.000000 0.006800 5677.000000 0.017000 5248.000000 0.027000 5080.000000 0.034000 5049.000000 0.000000 6123.000000 0.003400 5395.000000 0.006800 5077.000000 0.017000 4543.000000 0.027000 4254.000000 0.034000 4119.000000 0.068000 3872.000000 0.000000 5435.000000 0.003400 4673.000000 0.006800 4335.000000 0.017000 3748.000000 0.027000 3403.000000 0.034000 3228.000000 0.068000 2735.000000 0.170000 2353.000000 0.000000 4989.000000 0.003400 4224.000000 0.006800 3876.000000 0.017000 3270.000000 0.027000 2916.000000 0.034000 2736.000000 0.068000 2206.500000 0.170000 1646.100000 0.270000 1478.300000 0.340000 1450.000000 0.000000 4645.000000 0.003400 3874.000000 0.006800 3529.000000 0.017000 2915.000000 0.027000 2557.300000 0.034000 2376.100000 0.068000 1843.900000 0.170000 1257.000000 0.270000 1038.800000 0.340000 951.800000 0.680000 812.300000 0.000000 4339.000000 0.003400 3570.000000 0.006800 3219.900000 0.017000 2617.100000 0.027000 2254.900000 0.034000 2074.200000 0.068000 1543.600000 0.170000 963.700000 0.270000 743.600000 0.340000 652.200000 0.680000 445.600000 1.700000 326.500000 0.000000 2763.000000 0.003400 2514.600000 0.006800 2375.200000 0.017000 2103.100000 0.027000 1923.500000 0.034000 1823.400000 0.068000 1500.800000 0.170000 1069.900000 0.270000 876.600000 0.340000 789.500000 0.680000 572.200000 1.700000 389.900000 2.700000 343.050000 3.400000 335.470000 0.000000 11287.000000 0.003400 8343.000000 0.006800 7511.000000 0.017000 6447.000000 0.027000 6066.000000 0.034000 5996.000000 0.000000 10311.000000 0.003400 7293.000000 0.006800 6411.000000 0.017000 5180.000000 0.027000 4590.000000 0.034000 4324.000000 0.068000 3860.900000 0.000000 9267.000000 0.003400 6213.000000 0.006800 5315.000000 0.017000 4016.200000 0.027000 3365.300000 0.034000 3057.600000 0.068000 2260.900000 0.170000 1730.800000 0.000000 8736.000000 0.003400 5686.600000 0.006800 4774.000000 0.017000 3465.400000 0.027000 2818.200000 0.034000 2512.100000 0.068000 1708.800000 0.170000 1019.600000 0.270000 848.500000 0.340000 820.300000 0.000000 8391.800000 0.003400 5332.500000 0.006800 4438.800000 0.017000 3126.800000 0.027000 2482.900000 0.034000 2182.700000 0.068000 1398.200000 0.170000 720.400000 0.270000 522.000000 0.340000 451.400000 0.680000 347.800000 0.000000 8150.600000 0.003400 5080.700000 0.006800 4176.700000 0.017000 2899.300000 0.027000 2254.900000 0.034000 1955.000000 0.068000 1186.800000 0.170000 539.900000 0.270000 352.600000 0.340000 284.700000 0.680000 153.900000 1.700000 93.450000 0.000000 8071.600000 0.003400 4984.400000 0.006800 4081.800000 0.017000 2816.200000 0.027000 2171.700000 0.034000 1873.500000 0.068000 1112.200000 0.170000 477.200000 0.270000 297.500000 0.340000 233.200000 0.680000 110.430000 1.700000 44.350000 2.700000 32.610000 3.400000 30.800000

【问题讨论】:

  • 我不知道您需要什么帮助。您的意思是要在每次调用时使用数据集的不同部分重复调用FindFit 吗?也许some = Part[B, 1 ;; 32]',然后是some = Part[B, 33 ;; 64]'some = Part[B, 65 ;; 96]'?但无论你试图做什么循环都很少是 Mathematica 的答案。
  • 是的,你说得对……我想要你说的那样。
  • 如何在mathematica中制作.m类似文件,就像在matlab中所做的那样,因为每次都必须在mathematica中输入输入并换档输入结果..
  • 使用 Import[file,"Table"] 而不是 readlist。 import 将为您的空白行提供空条目,我不确定,但我认为 readlist 只是一起运行。
  • 你是对的乔治,但这对我的事业有什么帮助..我希望了解我要求的高性能标记可以提供更多见解

标签: dataset wolfram-mathematica


【解决方案1】:

在这里,试试这个来读取你的数据:

filedata = Function[data, data[[#[[1]] ;; #[[2]] - 2]] & /@
         Partition[Join[{1}, # + 1, 
             If[Length[data] > #[[-1]], {Length[data] + 2}, {}]] &[
                 Flatten[Position[data, {}] ]], {2}, 1]]@Import[filename, "Table"]

如果有一种不那么复杂的方法,我也想知道。

解释:

当您导入空行时,会生成空列表 {} ,因此 Position[data, {}] 会给出所有数据边界位置的列表。 If[..] 将数据末尾添加到列表中,以防文件末尾没有双重返回。其余的只是在这些边界上对数据列表进行分区。

您无需担心使用Import 检测文件结尾。 Mathematica 确实有一个使用stream=Open[] .. Read[stream,..] .. 构造的更底层的传统编程io 接口。如果您使用它,您确实需要检测 eof,例如 While[ Read[] != EndOfFile , .. ]。不过在这种情况下不需要这样做。

【讨论】:

  • 哦,谢谢乔治,这对我来说似乎是一些繁重的东西......我需要时间来理解......:)
  • 如何在mathematica中测试文件结尾??
  • 我想要的是我想选择每个数据集,例如从第 1 行到第 6 行,然后将给定的曲线拟合到它,然后将曲线拟合到下一个数据集等等。 ..
猜你喜欢
  • 2014-03-08
  • 2016-02-24
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2018-12-17
  • 2014-02-22
相关资源
最近更新 更多