您提出了3個問題,我會盡力回答所有問題。由於belisarius pointed out,Mathematica區分大小寫。所以,你的代碼應該是:
In[1]:=ReadList["testA.txt", Number, RecordLists -> True]
然而,隨着第一行是由String
不是Number
s這個仍然會產生錯誤。因此,最簡單的做法是使用Michael Pilat's solution並使用Import
。這將返回一個列表,其中文件中的每個記錄都將成爲子列表之一。
要訪問特定的子表,你使用Part
,或者其簡單的形式[[ ]]
,如下:
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}
現在,再添列到您的列表中,有幾種方法。最簡單的方法是Transpose
你的數據,
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}}
選擇現在行和Apply
功能對他們來說,
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~{[email protected]@#[[{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對您有用嗎?如果是的話,開始標記更好的答案爲「接受」,以表明 – 2010-11-03 02:34:35
OMG!你從來沒有投票答覆。永遠不會回答一個問題。這幾乎是一種恥辱... – 2010-11-03 02:46:10
belisarius是正確的。本網站運營累積的聲譽是通過其他人對您發佈的問題和答案進行投票獲得的,並可能將您的答案視爲最佳/正確答案。爲了使這個系統起作用,你應該對你認爲有用的答案進行投票,並接受那些能夠最好地回答你的問題的答案。否則,從長遠來看,你最終會發現你的問題被忽略。 – rcollyer 2010-11-03 03:29:16