行[[1,2,3]、[4,5,6]]のリストとして与えられた行列を持っていれば、最初の列、[1,4]。私はHaskellの絶対初心者です。ネストされたリストをどう扱うかについてもわかりません。Haskellの行のリストとして与えられた行列の最初の列
答えて
次のコードは、仕事を行います。
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]
もっとです:
col :: Int -> [[a]] -> [a]
col n = map (head . drop n)
nがより大きいか、あなたがそれを与えるリストのいずれかの長さに等しい場合、これは失敗することに注意してください。
次のコードは、仕事をする:ヨナス答えに拡大すること
map head [[1,2,3],[4,5,6]]
。 map
は、リストの各要素に関数を適用します。関数をリストに「マッピング」すると、別のタイプの新しいリストになります。
ここに入力したリストのタイプは[[Int]]
です。つまり、リスト内の各要素はInt
のリストです。したがって、各サブリストを取得して最初の要素を返す関数が必要です。つまり、head
です。
map
は、機能head
を取るあなたは、各リストのちょうど先頭(最初の要素)を含むタイプ[Int]
の新しいリストを取得するように、サブリストのそれぞれに適用されます、総括します。
行の行列を列の行列に変換するライブラリ関数は、Data.List.transpose
です。だからあなたの問題を解決する一つの方法は、
import Data.List (transpose)
col = head . transpose
でまた行列から任意の列を取得する関数を書くことができます:
colN n matrix = transpose matrix !! n
免責事項:
をあなたが必要な場合は、転置が高価であることを忘れないでください行列全体を転置する。最初の列については、他のソリューションが提供しているのとほぼ同じコストでなければなりません。
また、転置は、その結果が引数と同じ型:[[a]] -> [[a]]
であるため、複雑なコードでは比較的危険です。だから間違った数の転置をするのは簡単です。 (私はこれを難しい方法で学びました)。
- 1. 与えられた行列のうち最大行列と最小行列を見つけよう
- 2. 与えられた行と列のインデックスNumPy配列のグリッドに割り当て
- 3. 与えられた列のNaNでない最初の行を選択してDataFrameをフィルタリングします。
- 4. 削除行と列のすべての行の値(または列)が与えられたcontion
- 5. Numpy:テンソル与えられたインデックスのリストから行列を得る
- 6. Python 3.5:与えられた密度の行列に対するリストの理解?
- 7. 与えられた列と行のchar配列のインデックスを見つける?
- 8. Python:最初の列を行名としてロードし、列名として最初の行
- 9. 秒文字列のリストとして与えられた期間の値で
- 10. 行列の最初の2列のtclリストを作成する
- 11. R - replicate与えられた行列の分数因数設計
- 12. マトリックス:与えられた行列から値を取得し
- 13. 新しい列のデータフレームの最初の行を(リストに)変換して最初の行を削除する
- 14. CGAL:2行/ベクトル/方向が与えられた回転の変換行列
- 15. PHP PDOStatement:配列のキーとして最初の列として行を取得
- 16. 行列のサイズがJAVAの最初の行に指定されたファイルから行列を読み取る
- 17. 最初の長さが与えられた2つのリストを分割する
- 18. 与えられた配列のCアセンブリエラー
- 19. 行と列番号が与えられたセルの内容を取得
- 20. matlabで文字列と辞書のセットを与えられた整数の行列を作成します
- 21. リストの各行の最初の列にアクセスするPython
- 22. インデックス行列を与えられた行列のエントリをいくつか選択しますか?
- 23. C++最大/ Iは、タスクを与えられた配列のサイズ
- 24. 与えられた列のナンシー最小値
- 25. CSVファイルの最初の行を列名として使用SQL
- 26. 与えられた文字列から行列を生成する
- 27. PHP MySQLのテーブルフェッチは、最初の行のみを与える
- 28. 与えられた週の最初の日付(NSDate)
- 29. スキャンしたウェイトベクトルを与えられた重み付けされた行列(theano)
- 30. 与えられた行のテーブル列からデータを挿入する方法は?
これに相当する 'col n = map(!! n)'は、意図を少しはっきりと伝えると思います。 YMMV。 – ephemient