操纵Mathematica中的表格

时间:2016-09-27 13:46:29

标签: wolfram-mathematica data-manipulation

我正在尝试的索引方案似乎很简单(但错误)...... data是从Oracle数据库导入的数据表的名称。 我尝试将指针移到List [....]之外并成功测试(在[100]中)。 我是Mathematica的新手......使用Wolfram帮助工具进行小圈子 有人能让我摆脱困境并指出一个更好的方法吗?

In[100]:= dat[n_, m_] := data[[n, m]];
          dat[1, 3]
Out[102]= 0.70388
In[104]:= List[dat[n, 3], {n, 1, Length[data]}]

During evaluation of In[104]:= Part::pkspec1: The expression n cannot be used as a part specification.

Out[104]= {{{0.00499, 0.00037, 0.70388, 0.00526, 0.00008, 
    0.00006}, {0.00176, 0.00006, 0.31315, 0.00129, 0.01142, 
    0.00016}, {0.00201, 0.00013, 0.32143, 0.00158, 0.01544, 
    0.00041}, {0.00507, 0.00015, 0.7228, 0.00263, 0.00002, 
    0.00001}, {0.00516, 0.00011, 0.72381, 0.0028, 0.00001, 
    0.00001}, {0.00203, 0.00019, 0.31207, 0.00297, 0.01143, 
    0.00044}, {0.00138, 0.00024, 0.26769, 0.00349, 0.00098, 
    0.00018}, {0.00182, 0.00007, 0.31365, 0.00129, 0.01383, 
    0.0002}, {0.00531, 0.00009, 0.72048, 0.00212, 0., 
    0.00001}, {0.00395, 0.00019, 0.60555, 0.00307, 0.00047, 
    0.00007}, {0.0055, 0.00017, 0.72021, 0.00332, 0.00001, 
    0.00001}, {0.00175, 0.00016, 0.30605, 0.00313, 0.00933, 
    0.00035}, {0.00198, 0.00009, 0.29497, 0.00135, 0.01019, 
    0.00023}, {0.00545, 0.00016, 0.72135, 0.00249, 0.00001, 
    0.00001}, {0.00179, 0.00038, 0.33179, 0.00791, 0.01627, 
    0.00097}, {0.00211, 0.00013, 0.31377, 0.00171, 0.01289, 
    0.00031}, {0.00515, 0.00057, 0.7213, 0.00766, 0.00006, 
    0.00018}, {0.00543, 0.00012, 0.72163, 0.0025, 0., 
    0.00001}, {0.00395, 0.00011, 0.72095, 0.00267, 0.00001, 
    0.00001}, {0.00548, 0.00014, 0.72343, 0.00278, 0., 0.00001}}[[n, 
  3]], {n, 1, 20}}

1 个答案:

答案 0 :(得分:1)

List功能并不意味着以您尝试在此处执行的方式提取数据。 List基本上只是一个包装器,表明内部的任何内容都是一系列事物。如果您使用大括号({...})在Mathematica中构建列表,则会自动调用List函数:

FullForm[{1, 2, 3}]

给出:

List[1, 2, 3]

永远记住,在Mathematica中你会调用命名函数,即使它并不是很明显。例如,如果您键入dat[[1]],则实际上正在调用Part函数。您可以通过将代码包装在Hold(告诉Mathematica只保留当前形式的代码)然后在FullForm(告诉Mathematica向您展示)来查看您正在使用的功能Mathematica如何在内部解释您的输入:

FullForm[Hold[ dat[[1]] ]]

这导致:

Part[dat, 1]

因此,如果您想了解发生了什么,请阅读Part函数以及Part文档中的所有链接文档页面。

至于你的其余问题:如果你想让索引在一个范围内运行,你可以使用Table函数。这样你的代码就可以了:

Table[dat[n, 3], {n, 1, Length[data]}]

但是,我甚至不会理会你放在顶部的定义。您可以使用Span访问数据元素(在文档中查找该功能。Span缩写为符号;;)和All,如下所示:

data[[All, 3]]

或:

data[[1 ;; Length[data], 3]]

我建议阅读文档的这些部分(您可以在F1下的Mathematica文档中找到它们以及使用以下在线链接):

https://reference.wolfram.com/language/tutorial/ManipulatingElementsOfLists.html

https://reference.wolfram.com/language/ref/Part.html

https://reference.wolfram.com/language/ref/Span.html

https://reference.wolfram.com/language/ref/Take.html

https://reference.wolfram.com/language/ref/Table.html