List.map для столбцов вместо строк в OCaml - PullRequest
0 голосов
/ 03 декабря 2018

Скажите, у меня есть следующий 'список списка:

[[a1 ; a2 ; a3];[b1 ; b2 ; b3] ;[c1 ; c2 ; c3]]

Есть ли способ применить функцию f к элементам этого списка, чтобы получить следующее, используя List.map?

[ f [a1; b1; c1]; f [a2; b2; c2]; f [a3; b3; c3]]

Я знаю, что List.map выполняет итерацию по каждому элементу моего списка списков, но применяет функцию f к каждому списку (строке) в моем списке списков вместо каждого столбца * 1009.* из моего 'списка

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Помимо ответа Джеффри Скофилда, ниже приведено определение функции transpose_map.

(**
  Returns a list of list. The i-th element is a list whose first element is
  the i-th element of xs followed by the i-th element of ys.

  For
    xs = [ x1; x2; ...]
    ys = [ [y11; y12; ... ]; [ y21; y22; ... ]; ... ]
  the function gives
    [ [ x1; y11; y12; ... ]; [ x2; y21; y22; ...]; ... ]
  .
*)
let rec list_cons xs ys =
  List.map2 (fun x zs -> x :: zs) xs ys

(** Compute the transpose of a list of list. *)
let rec transpose m =
  match m with
  | [] -> []
  | [a] -> List.map (fun x -> [x]) a
  | hd :: tl -> list_cons hd (transpose tl)

(** Apply a function to the columns of a matrix and return the list of
  transformed columns. *)
let transpose_map f xs = List.map f (transpose xs)
0 голосов
/ 03 декабря 2018

Ну, столбцы не существуют как значения в ваших данных.Вы могли бы сказать, что они существуют больше как идея.Таким образом, в данных нет ничего, что вы можете передать f, чтобы получить желаемый результат.

Конечно, вы можете создать списки, представляющие столбцы, а затем применить f к ним.

Если ваш список представляет матрицу, вы хотите список, который представляет транспонирование матрицы.Таким образом, один из возможных способов - написать функцию для транспонирования вашей матрицы, а затем применить List.map к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...