数学中的循环结构

感谢回答之前的问题,我做了以下,但我试图执行此循环,但没有给出错误。 我正在尝试做日期差异。

In[7] = Import["testA.txt", "Table" , "HeaderLines" -> 1]
Out[7] = {{100, 2010, 2, 20, 2010, 8, 30}, {110, 2010, 4, 30, 2010, 9, 
           12}, {112, 2010, 8, 20, 2010, 10, 28}}

In[10] =  For[i = 1, i < 4,   
          i = i + 1, {a = Out[7] [[i, 2]], b = Out[7] [[i, 3]],   
          c = Out[7] [[i, 4]] , d = Out[7][[i, 5]], e = Out[7][[i, 6]],   
          f = Out[7][[i, 7]], DateDifference[{a, b, c}, {d, e, f}]}]  

是。 对于[]不会生成输出。 计算出你想要的计算机的差异(191,135和69),并且结果不被写入或存储在任何地方。 为了证明这一点,请将DateDifference []调用重写为Print[DateDifference[{a,b,c},{d,e,f}]];

没有任何关于你想要发生的事情的暗示。 目前尚不清楚如何提供更多建议。 你可以播种[]和收获[]。 您可以将DateDifference []的结果[]添加到结果列表中。 您可以打印差异(如上所述)。 您可以将结果分配给某些变量,定义一个符号以获取其特定输入的值,等等,等等。

- 编辑 -

噢,为了解决其他一些受访者的问题,此代码的正确形式是:

    foo = Import["testA.txt", "Table" , "HeaderLines" -> 1];
    diff[in_List] := Join[in[[Range[2, 7]]], {DateDifference[in[[Range[2, 4]]], in[[Range[5, 7]]]]}]
    diff /@ foo

输出为: {{2010, 2, 20, 2010, 8, 30, 191}, {2010, 4, 30, 2010, 9, 12, 135}, {2010, 8, 20, 2010, 10, 28, 69}} (你也可能想要在某处指定)。


因为,你似乎想要单独处理每个列表元素,所以我会使用Map (或其简写形式/@ ),如下所示。

In[1]:=data = {{100, 2010, 2, 20, 2010, 8, 30}, 
               {110, 2010, 4, 30, 2010, 9, 12}, 
               {112, 2010, 8, 20, 2010, 10, 28}};
       #~Join~{DateDifference[#[[2;;4]],#[[5;;]]]}& /@ data
Out[1]:={191, 135, 69}

Mathematica主要是一种函数式编程语言,所以尽管像For这样的结构存在,但通常更好地考虑在表达式上运行和变换表达式的函数。 通常,如果你需要一个像For这样的程序流程, Table是一个更好的选择。

我的代码有一个轻微的缺点,缺乏命名变量有时可能是一种痛苦。 然而,在这种情况下,它们不是必需的。 但是,如果你需要他们有可能被用于几个结构WithBlockModule ,甚至Function


警告:这不是要走的路

这是你的程序纠正和运行。 我发布它是因为我看到代码中可能存在概念性错误,我认为有一个用于与您的代码进行比较的正在运行的版本可能会帮助您识别它们并进行学习。

一些观点:

  • 常用构造的使用(Length @ x,i ++等)
  • 不要使用“Out [n] =”...不要使用大写字母作为变量名的第一个字符
  • 了解如何构建列表(请参阅AppendTo)
  • 这是一个正在运行的代码:

    x = Import["testA.txt", "Table" , "HeaderLines" -> 1]
    
    ret = {};
    For[i = 1, i <= Length@x, i++,
      AppendTo[ret,
        {a = x[[i, 2]],
         b = x[[i, 3]],
         c = x[[i, 4]],
         d = x[[i, 5]],
         e = x[[i, 6]],
         f = x[[i, 7]],
         DateDifference[{a, b, c}, {d, e, f}]}
        ];
      ];
    Print@ret  
    

    但正如我所说,这不是走的路。 阅读并学习(并在调试中运行!)rcollyer的答案,以了解如何在Mathematica中正确执行此操作。

    顺便说一句,你可以用Table替换For循环(参见rcollyer的建议)

    Table[
          {a = x[[i, 2]],
           b = x[[i, 3]],
           c = x[[i, 4]],
           d = x[[i, 5]],
           e = x[[i, 6]],
           f = x[[i, 7]],
           DateDifference[{a, b, c}, {d, e, f}]}, {i, Length@x}]
    
    链接地址: http://www.djcxy.com/p/35573.html

    上一篇: loop structure in mathematica

    下一篇: Is there HashTable structure in Wolfram Mathematica?