У меня есть следующая проблема, и я надеюсь, что кто-то может мне помочь.F # подходящий контейнер для (струна, поплавок, поплавок) триады?
Краткое описание проблемы: мне нужно сохранить триаду (строка A, поплавок B, поплавок C) в подходящий контейнер. Триада исходит из двойного цикла «за». Но главное, что мне нужно будет срезать этот контейнер, когда петли закончили, чтобы выполнить другие операции.
Далее следует пример, который может быть выполнен из оболочки .fsx (с использованием кадров Deedle). Триада - это то, что напечатано на экране.
open Deedle
let categorical_variable = [| "A"; "B"; "C"; "A"; "B"; "C"; |]
let vec_1 = [| 15.5; 14.3; 15.5; 14.3; 15.5; 14.3; |]
let vec_2 = [| 114.3; 17.5; 9.3; 88.7; 115.5; 12.3; |]
let dframe = frame ["cat" =?> Series.ofValues categorical_variable
"v1" =?> Series.ofValues vec_1
"v2" =?> Series.ofValues vec_2 ]
let distinct_categorical_variables = categorical_variable |> Array.toSeq |> Seq.distinct |> Seq.toArray
let mutable frame_slice : Frame<int, string> = Frame.ofRows []
let mutable frame_slice_vec_1 : float[] = Array.empty
let mutable frame_slice_vec_1_distinct : float[] = Array.empty
for cat_var in distinct_categorical_variables do
frame_slice <- (dframe |> Frame.filterRowValues (fun row -> row.GetAs "cat" = cat_var))
frame_slice_vec_1 <- (frame_slice?v1).Values |> Seq.toArray
frame_slice_vec_1_distinct <- (frame_slice_vec_1 |> Array.toSeq |> Seq.distinct |> Seq.toArray)
for vec_1_iter in frame_slice_vec_1_distinct do
printfn "%s, %f, %f \n" cat_var vec_1_iter (Array.average ((frame_slice?v2).Values |> Seq.toArray)) |> ignore
Итак, есть ли подходящий объект, где хранить эту триаду? Я видел объекты Array3d, но я не думаю, что они являются правильным решением, потому что A, B и C моей триады имеют разные типы.
Большое спасибо заранее.
Спасибо, что решить мою проблему. – tinoswe
@tinoswe Обратите внимание, что вы также можете вызвать 'Seq.toList'. Как есть, сырой «seq» ленив, а это означает, что он будет пересчитываться каждый раз, когда вы перебираете его. Если вы сделаете его «списком», он сохранит результаты в памяти, а не пересчитывает. (Что может быть или не быть желательным в зависимости от ограничений вашей памяти). –
Хорошо, спасибо за разъяснение. – tinoswe