2015-06-22 103 views
1

我想寫一個函數來查找數據集的方差。如何從Lua中的數組的每個元素中減去一個值?

我困在一個小問題上。我有一個數組,我想知道數組中每個元素離平均值有多遠。下面是我寫的一個簡化版本:

>y={1,2,3} 
>y_average=2 
>y_diff={} 

>for key, value in pairs(y) do y_diff[key]=(y[key]-y_average) 
>>return unpack(y_diff) 
>>end 

-1 

什麼,我想: -1,0,1

它爲什麼只給我的第一個值,而不是所有三個?

+5

您的回報將在for循環的第一次迭代中發生並停止循環繼續。將'return unpack(y_diff)'移到循環的'end'之外/之下。 – ryanpattison

+0

真棒。非常感謝。 – pictorexcrucia

回答

0

您的回報正如評論中所述,在第一次迭代中打破循環。試試這個:

for i in ipairs(y) do 
    y_diff[i] = y[i] - y_average 
end 
print(table.concat(y_diff, '\t')) 

table.concat上沒有的元素,它可以處理量的限制,這將是你會用什麼,如果你想把一個文件中這些元素不是寫他們一個更快一個。

+0

這看起來更好。但我有幾個問題。你爲什麼寫「我,_在ipairs(y)」而不是「i,v in ipairs(y)」這是我以前見過的? 另外,它認爲table.concat將不同的表連接在一起。它的功能究竟是什麼? – pictorexcrucia

+0

如果你在討論ipairs之前的下劃線,那麼當我想要丟掉一個值時,我使用了一個變量名(這是一個有效的變量名!)。在這種情況下,它是多餘的,因爲它是第二個返回的變量。我將編輯我的代碼。 – Tritonio

相關問題