如果我有一個行列表[[1,2,3],[4,5,6]]給出的矩陣,我想返回第一列,[1,4]。我是Haskell的絕對初學者,我甚至不知道如何處理嵌套列表。作爲Haskell中的行列表給出的矩陣的第一列
3
A
回答
6
下面的代碼將做的工作:
map head [[1,2,3],[4,5,6]]
map
是Haskell中最有用的功能(和其他功能的編程語言)之一。鑑於列表[a,b,c,d]
和函數f
,map f [a,b,c,d]
將返回列表[f a, f b, f c, f d]
。 head
函數提取列表的第一個元素。這就是爲什麼
map head [[1,2,3],[4,5,6]] ->
[head [1,2,3], head [4,5,6]] ->
[1,4]
6
更一般:
col :: Int -> [[a]] -> [a]
col n = map (head . drop n)
請記住,如果n大於或等於任何你給它的列表的長度,這將失敗。
1
下面的代碼將做的工作:
map head [[1,2,3],[4,5,6]]
要擴大喬納斯的回答; map
將函數應用於列表的每個元素。在列表上「映射」一個函數的結果是一個不同類型的新列表。
您在此處輸入的列表的類型爲[[Int]]
,這意味着列表中的每個元素都是Int
s的列表。所以你需要一個函數來獲取每個子列表並返回它的第一個元素;那是head
。
綜上所述,map
將採取功能head
,將其應用到每個子列表中,這樣你就會獲得一個包含每個列表的只是頭(第一個元素)類型[Int]
的新列表。
2
將行矩陣轉換爲列矩陣的庫函數爲Data.List.transpose
。因此,要解決你的問題的一個方法是
import Data.List (transpose)
col = head . transpose
你也可以寫一個函數來獲取從矩陣的任何列:
colN n matrix = transpose matrix !! n
免責聲明:
記住,轉置是昂貴的,如果你需要轉置整個矩陣。就第一列而言,應該與人們提供的其他解決方案的成本相同。
此外,轉置在複雜的代碼中相對危險,因爲其結果與其參數的結果類型相同:[[a]] -> [[a]]
。所以很容易引入錯誤的轉置次數。 (我很難學到這一點)。
相關問題
- 1. 矩陣列表中的列表矩陣
- 2. 如何優雅地創建行列索引作爲第一行/列的矩陣?
- 3. 用矩陣表示矩陣作爲使用Jama的陣列
- 4. 將具有矩陣元素的列表的列表取消爲列表矩陣
- 5. 矩陣列表中的平均矩陣
- 6. 矩陣作爲陣列陣列
- 7. index給出矩陣的行
- 8. 對第一列的矩陣排序
- 9. 繪製除第一列外的矩陣
- 10. 如何將行和列作爲列表添加到矩陣中?
- 11. 作爲行或列的一維變換的矩陣的cuFFT
- 12. 繪製矩陣的第二列和第三列,並使用第一列作爲x軸的值使用ggplot()
- 13. Ç - 一個矩陣的表示作爲鏈接列表
- 14. 生成稀疏矩陣給出列表與字符串列表
- 15. Haskell陣列(矩陣)元素訪問
- 16. Haskell - 給元組的並行列表
- 17. opencv將一個矩陣複製到另一個矩陣的第一列中
- 18. 矩陣中列的排列
- 19. 列中的矩陣
- 20. 選擇一行矩陣作爲矩陣
- 21. 列表列出來合併矩陣
- 22. 如何檢查矩陣的列表是否包含Maple中給定的矩陣
- 23. java中的陣列矩陣
- 24. 矩陣列表
- 25. 如何創建一個稀疏矩陣作爲列表的列表? (C++)
- 26. 陣列/矩陣操作出錯
- 27. 如何根據第0列中的字符串將嵌套列表(用作矩陣)細分爲列表
- 28. 矩陣的行和列MATLAB
- 29. Python的矩陣,行和列
- 30. 典雅的矩陣行列表?
等價地,`col n = map(!! n)`,我認爲這個意圖更清楚一點。因人而異。 – ephemient 2009-05-18 14:16:42