F # — повторная обработка матрицы

#f# #matrix

#f# #матрица

Вопрос:

У меня есть следующие критерии для профиля пользователя :

Критерий 1 :

1 = Человек

2 = Женщина

3 = Неизвестно

Критерий 2 :

1 = Да

2 = Нет

Критерий 3 :

1 = Да

2 = Нет

3 = Неизвестно

У меня есть следующая матрица из SQL: Матрица «User1» [[3.;1.;2.]] ( Пол неизвестен / Да / Нет)

Я хотел бы найти код для получения следующей повторной обработки, и это может сработать, если будет добавлен новый критерий (еще один столбец для матрицы «User1» из SQL) :

Результат : [[0.;0.;1.;1.;0.;0.;1.;0.]]

что такое [[Мужчина; Женщина; Неизвестно; Да для Критерия2;Нет для критерия2;Да для Критерия3;Нет для Критерия3;Неизвестно для Критерия3]]

Комментарии:

1. Глядя на ваш последний пример, из-за того, как упорядочены элементы, я не вижу способа сделать это без указания количества строк. Возможно ли это?

Ответ №1:

Вам это нравится?

 //> conv [[3.;1.;2.]] ;;
//val it : float list list = [[0.0; 0.0; 1.0; 1.0; 0.0; 0.0; 1.0; 0.0]]
let conv data =
    let [[a:float;b;c]] = data
    let C1 = Array.create 3 0.
    let C2 = Array.create 2 0.
    let C3 = Array.create 3 0.
    C1.[int a - 1] <- 1.0
    C2.[int b - 1] <- 1.0
    C3.[int c - 1] <- 1.0
    [ Array.concat [| C1; C2; C3 |] |> Array.toList]