Wolfram mathematica 在Mathematica中读取这种类型的文件

Wolfram mathematica 在Mathematica中读取这种类型的文件,wolfram-mathematica,Wolfram Mathematica,这是数据文件: ID YR MO DA YrM MoM DaM 100 2010 2 20 2010 8 30 110 2010 4 30 2010 9 12 112 2010 8 20 2010 10 28 我应该能够访问此文件中的每个元素,我试图使用此函数在Mathematica中创建记录,但我遇到了一个错误 ReadList["testA.txt", Number, RecordLists -> true] E

这是数据文件:

ID  YR  MO  DA  YrM  MoM  DaM  
100  2010  2  20  2010  8  30  
110  2010  4  30  2010  9  12     
112  2010  8  20  2010  10  28  
我应该能够访问此文件中的每个元素,我试图使用此函数在Mathematica中创建记录,但我遇到了一个错误

ReadList["testA.txt", Number, RecordLists -> true]

Error: ReadList::opttf: Value of option RecordLists -> true should be True or False.
还有,在做记录之后,如何访问每个元素

在Mathematica中,也有一种方法可以创建一个多列来区分两个日期,并将其放入新列中

这项家庭作业允许使用excel进行计算,但我必须在Mathematica中进行计算。

True:)

Mathematica区分大小写(正确:)


Mathematica区分大小写

您可以使用格式的
导入
,甚至可以忽略标题行:

In[1:= Import["test.txt", "Table", "HeaderLines" -> 1]

Out[1]= {{100, 2010, 2, 20, 2010, 8, 30}, {110, 2010, 4, 30, 2010, 9,
12}, {112, 2010, 8, 20, 2010, 10, 28}}

您可以将
Import
与格式一起使用,甚至可以忽略标题行:

In[1:= Import["test.txt", "Table", "HeaderLines" -> 1]

Out[1]= {{100, 2010, 2, 20, 2010, 8, 30}, {110, 2010, 4, 30, 2010, 9,
12}, {112, 2010, 8, 20, 2010, 10, 28}}

你已经问了3个问题,我会尽力回答。如前所述,Mathematica区分大小写。因此,您的代码应该是:

In[1]:=ReadList["testA.txt", Number, RecordLists -> True]
但是,这仍然会产生错误,因为您的第一行由
String
s而不是
Number
s组成。因此,最简单的方法就是使用
Import
。这将返回一个列表列表,其中文件中的每个记录都将成为其中一个子列表

要访问特定子列表,请使用或其更简单的形式
[[]]
,如下所示:

In[2]:={{100, 2010, 2, 20, 2010, 8, 30}, 
        {110, 2010, 4, 30, 2010, 9,12}, 
        {112, 2010, 8, 20, 2010, 10, 28}}[[1]]
Out[2]:={100, 2010, 2, 20, 2010, 8, 30}
或者,如果您想要一个特定的列

In[3]:={{100, 2010, 2, 20, 2010, 8, 30}, 
        {110, 2010, 4, 30, 2010, 9,12}, 
        {112, 2010, 8, 20, 2010, 10, 28}}[[All,4]]
Out[3]:={20, 30, 20}
现在,要向列表中添加另一列,有两种方法。最简单的方法是对数据进行
转换

In[4]:=Transpose[data]
Out[4]:={{100, 110, 112}, {2010, 2010, 2010}, {2, 4, 8}, 
         {20, 30, 20}, {2010, 2010, 2010}, {8, 9, 10}, {30, 12, 28}}
选择“现在”行及其对应的函数

In[5]:=Plus @@ Out[4][[{3,6}]]
Out[5]:={10,13,18}
将新行附加到旧数据,并向后转置

In[6]:=Out[4]~Join~Out[5] // Transpose
Out[6]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
        {110, 2010, 4, 30, 2010, 9, 12, 13}, 
        {112, 2010, 8, 20, 2010, 10, 28, 18}}
从概念上讲,一种更困难但更直接的方法是使用
Map
对原始数据中的每一行应用一个函数,该函数返回存在新数据的行

In[7]:=Map[#~Join~{Plus@@#[[{3,6}]]}&, data]
Out[7]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
        {110, 2010, 4, 30, 2010, 9, 12, 13}, 
        {112, 2010, 8, 20, 2010, 10, 28, 18}}

你已经问了3个问题,我会尽力回答。如前所述,Mathematica区分大小写。因此,您的代码应该是:

In[1]:=ReadList["testA.txt", Number, RecordLists -> True]
但是,这仍然会产生错误,因为您的第一行由
String
s而不是
Number
s组成。因此,最简单的方法就是使用
Import
。这将返回一个列表列表,其中文件中的每个记录都将成为其中一个子列表

要访问特定子列表,请使用或其更简单的形式
[[]]
,如下所示:

In[2]:={{100, 2010, 2, 20, 2010, 8, 30}, 
        {110, 2010, 4, 30, 2010, 9,12}, 
        {112, 2010, 8, 20, 2010, 10, 28}}[[1]]
Out[2]:={100, 2010, 2, 20, 2010, 8, 30}
或者,如果您想要一个特定的列

In[3]:={{100, 2010, 2, 20, 2010, 8, 30}, 
        {110, 2010, 4, 30, 2010, 9,12}, 
        {112, 2010, 8, 20, 2010, 10, 28}}[[All,4]]
Out[3]:={20, 30, 20}
现在,要向列表中添加另一列,有两种方法。最简单的方法是对数据进行
转换

In[4]:=Transpose[data]
Out[4]:={{100, 110, 112}, {2010, 2010, 2010}, {2, 4, 8}, 
         {20, 30, 20}, {2010, 2010, 2010}, {8, 9, 10}, {30, 12, 28}}
选择“现在”行及其对应的函数

In[5]:=Plus @@ Out[4][[{3,6}]]
Out[5]:={10,13,18}
将新行附加到旧数据,并向后转置

In[6]:=Out[4]~Join~Out[5] // Transpose
Out[6]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
        {110, 2010, 4, 30, 2010, 9, 12, 13}, 
        {112, 2010, 8, 20, 2010, 10, 28, 18}}
从概念上讲,一种更困难但更直接的方法是使用
Map
对原始数据中的每一行应用一个函数,该函数返回存在新数据的行

In[7]:=Map[#~Join~{Plus@@#[[{3,6}]]}&, data]
Out[7]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
        {110, 2010, 4, 30, 2010, 9, 12, 13}, 
        {112, 2010, 8, 20, 2010, 10, 28, 18}}

顺便说一句,你已经问了八个问题,但从来没有接受过答案。。。StackOverflow对你有用吗?如果是,开始将更好的答案标记为“已接受”,以表明OMG!!你从来没有投过票。从来没有回答过一个问题。这几乎是一种耻辱…贝里萨里乌斯是正确的。本网站以累积的声誉为基础,这些声誉是通过其他人对您发布的问题和答案进行投票获得的,并且您的答案可能被认为是最佳/正确的答案。为了让这个系统发挥作用,你应该对你认为有用的答案进行投票,并接受那些最能回答你问题的答案。否则,从长远来看,你最终会发现你的问题被忽视。顺便说一句,你已经问了八个问题,但从未接受过答案。。。StackOverflow对你有用吗?如果是,开始将更好的答案标记为“已接受”,以表明OMG!!你从来没有投过票。从来没有回答过一个问题。这几乎是一种耻辱…贝里萨里乌斯是正确的。本网站以累积的声誉为基础,这些声誉是通过其他人对您发布的问题和答案进行投票获得的,并且您的答案可能被认为是最佳/正确的答案。为了让这个系统发挥作用,你应该对你认为有用的答案进行投票,并接受那些最能回答你问题的答案。否则,从长远来看,你最终会发现你的问题被忽视。@belisarius:谢谢。有些日子,这就是我所做的。关于添加专栏,我最近发现了
ArrayFlatten
的乐趣:@Janus:我倾向于忘记这一点,但你是对的,这将消除对
转置
-process-
转置
方法的任何需要。@belisarius:谢谢。有些日子我只做这些。关于添加专栏,我最近发现了
ArrayFlatten
的乐趣:@Janus:我倾向于忘记这一点,但你是对的,这将消除对
转置
-process-
转置
方法的任何需要。