Roman
07.09.2017
10:59:21
+
Evgeniy
07.09.2017
10:59:36
хмм
Почитай документацию, друже.
https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/casting-and-conversions-%5Bfsharp%5D#casting-object-types
Там есть примеры.
Anton
07.09.2017
11:00:53
хм интересно, а я то думал, для чего эти :>
Google
Pavel
07.09.2017
11:23:23
что означает шарп перед IPEndPoint в данном контексте?
возможно, что это дженерик, который получается вывести в данном контексте только как IPEndpoint?
Anton
07.09.2017
11:32:30
@gsomix а как бы так через F# мне из массива достать самые высокие по модулю числа ?
P
07.09.2017
11:34:04
Array.sortBy | Seq.take подойдут?
Anton
07.09.2017
11:34:30
сейчас гляну
Vasily
07.09.2017
11:34:37
Array.maxBy
Anton
07.09.2017
11:34:38
но вроде я так пробовал и не подошло
Vasily
07.09.2017
11:35:38
Ну ищешь максимум
потом фильтр
Pavel
07.09.2017
11:35:52
arr |> Array.map (fun x -> (Math.Abs x, x)) |> Array.sortByDescending (fun (xAbs, x) -> xAbs) |> Array.map (fun (_, x) -> x)
P
07.09.2017
11:36:04
Seq.sortBy | Seq.take
Anton
07.09.2017
11:36:12
у меня есть нюанс, мне нельзя минусы удалять =)
Google
Klei
07.09.2017
11:36:25
Array.maxBy abs
Ilya
07.09.2017
11:36:53
arr |> Array.sortByDescending Math.Abs |> Array.take 10
Pavel
07.09.2017
11:37:05
Ilya
07.09.2017
11:37:24
так же, но без лишних мапов
Pavel
07.09.2017
11:37:41
хмм, да
Anton
07.09.2017
11:38:30
у меня почемуто нету методов sortByDescending и take у Array
Pavel
07.09.2017
11:38:37
я вот думаю, стоит ли накидывать говна
Anton
07.09.2017
11:38:37
я чего-то забыл подключить?
Pavel
07.09.2017
11:38:47
вы тут все такие дружелюбные тип
P
07.09.2017
11:38:51
У тебя F# какой версии?
Anton
07.09.2017
11:39:18
4.что-то-там
Fsharp.Core 4.3.1.0
Klei
07.09.2017
11:39:52
Можно узнать, чем не подходит items |> Array.maxBy abs?
Pavel
07.09.2017
11:39:53
скинь кусок кода
Evgeniy
07.09.2017
11:39:56
P
07.09.2017
11:40:08
Pavel
07.09.2017
11:40:20
Klei
07.09.2017
11:40:24
Nikolay
07.09.2017
11:40:27
P
07.09.2017
11:41:01
Лично я не вижу в Array модуле take. Но можно как-то так: Array.toSeq |> Seq.take
Google
Anton
07.09.2017
11:41:16
а мне нужен мой массив
Nikolay
07.09.2017
11:41:29
Anton
07.09.2017
11:41:30
только исключая малые велечины
P
07.09.2017
11:41:31
Просто не очень понятно зачем тратить память на временный массив (он же будет хранится?), если можно просто всё сделать в рамках Seq
Nikolay
07.09.2017
11:41:42
Array это же IEnumerable
Anton
07.09.2017
11:42:09
скинь кусок кода
open System
open MathNet.Numerics.IntegralTransforms
open MathNet.Filtering
[<EntryPoint>]
let main argv =
let vector = [|1.0;1.0;1.0;2.0;3.0;3.0;3.0;4.0;4.0;5.0;6.0;6.0;6.0;7.0;8.0;9.0;9.0|]
let dph = Hartley.NaiveForward (vector,HartleyOptions.AsymmetricScaling) |> Array.map Math.Round
printfn "%A" (dph |> Array.sortByDescending Math.Abs |> Array.take 10)
0
Ilya
07.09.2017
11:43:29
ну воспользуйся простым sortBy
только инвертируй все числа и все ( с помощью унарного минуса )
Anton
07.09.2017
11:44:16
c унарного минуса по подробней
я только так умею Array.Reverse
но take всеравно нету
Ilya
07.09.2017
11:45:10
сделай Seq.take 10 |> Seq.toArray
Seq.sortBy (fun x -> - abs x)
Anton
07.09.2017
11:46:07
угу уже делал
афк
Nikolay
07.09.2017
12:02:23
Ilya
07.09.2017
12:02:44
там минус еще
Seq.sortBy (abs >> (-)) возможно так можно, но я не уверен
Google
Nikolay
07.09.2017
12:04:23
let negAbs x = -(abs x)
Seq.sortBy negAbs
Anton
07.09.2017
12:39:58
Ilya
Ilya
07.09.2017
12:40:15
ну ок, значит нельзя
Anton
07.09.2017
12:40:38
в целом
(dph |> Array.sortBy Math.Abs |> Seq.take 3) работает прямо противоположно тому, что мне нужно
[0.0; 0.0; -3.0]
а мне как-бы наоборот нужно =)
Ilya
07.09.2017
12:41:24
ну так вместо Array.sortBy Math.Abs напиши Seq.sortBy (fun x -> - abs x)
Anton
07.09.2017
12:41:40
хм, - abs
Ilya
07.09.2017
12:41:48
да
Anton
07.09.2017
12:41:52
никогда не бы не подумал, что там можно =)
забавно!
но вот есть ещё "нюанс" - важно брать именно в той последовательности, в которой оно лежало изначально
Ilya
07.09.2017
12:43:27
то есть?
Vasily
07.09.2017
12:43:34
Ну тогда только фолдом
Точнее фильтром
И в два прохода
Сначала макс находишь
Потом по фильтру берешь
Anton
07.09.2017
12:45:30
то есть?
есть
[|78.0; -26.0; -16.0; -15.0; -9.0; -5.0; -7.0; -5.0; -4.0; -4.0; -3.0; -4.0; 0.0;
0.0; 5.0; 8.0; 22.0|]
стало
[|78.0; -26.0; 22.0; -16.0; -15.0|]
А должно было стать
[|78.0; -26.0; -16.0; -15.0 22.0;|]
Vasily
07.09.2017
12:46:11
Чет я не понял, что тебе надо отсекать
Google
Anton
07.09.2017
12:46:37
Если коротко - это алгоритм сжатия по Хартли - руками.
Vasily
07.09.2017
12:46:49
Мне это ни о чем не говорит
Anton
07.09.2017
12:46:57
мне нужно отсекать то, у чего низкая энергия
но ПОТОМ при обратном преобразовании нужно вставить нули туда, где они были
Vasily
07.09.2017
12:47:35
Условия какие?
Anton
07.09.2017
12:47:37
т.е мне нужно знать, из какой ячейки я выдрал значение
что бы между ними засунуть нули
и выполнить декодирование
так работает jpeg, mp3, mpeg, etc
в теории, можно выполнить поиск поиск потом по исходному вектору и достать индексы вытянутых значений с помощью сортировки и отрицательного модуля
это так - костылик
Vasily
07.09.2017
12:49:56
Ну сначала сделай mapi
Anton
07.09.2017
12:49:58
либо - изначально достать как нужно и потом не будет проблем, что бы жахнуть между ними нулей.
Vasily
07.09.2017
12:50:01
Потом остальное
Anton
07.09.2017
12:50:37
В целом - большое спасибо всем за ответы
Array.sortBy (fun x -> - Math.Abs x) |> Seq.take 5 прямо магия
я уже придумывал overДафига алгоритом с кучей мапов и условий
Vasily
07.09.2017
12:53:43
А, так тебе надо взять первые 5 максимумов по модулю?
Диджитал
07.09.2017
12:55:31
c мутабельными структурами данных это за один проход пишется...
Anton
07.09.2017
12:56:20
Vasily угу