小编Tom*_*cek的帖子

FSharpChart.SaveAs()在图表渲染完成之前调用时保存空白图像

在F#Interactive中运行时,我希望以下代码创建一个简单的饼图并将其保存到磁盘:

let pie = FSharpChart.Pie([("Apples",1);("Oranges",2);("Bananas",3)])
FSharpChart.SaveAs "test.png" ChartImageFormat.Png pie
Run Code Online (Sandbox Code Playgroud)

但是,实际保存在"test.png"中的是一个空白图像.如果我将图表管道输入FShartChart.SaveAs函数,也会发生同样的情况.但是,如果我首先只执行图表创建代码并在手动执行SaveAs之前给图表提供时间,则图像会按预期保存.

有没有办法阻止对FSharpChart.Pie的调用,直到渲染完成?我在Visual Studio 2013中使用FSharpChart.fsx版本0.60.

f# dotnetcharting f#-charting

6
推荐指数
1
解决办法
827
查看次数

如何将数据从FSharp.Data.CsvProvider传递给Deedle.Frame?

我正在尝试将数据从FSharp.Data.CsvProvider传递到Deedle.Frame.

我几乎是F#的新手,我需要将一些CSV文件从文化"it-IT"转换为"en-US",这样我才能使用这些数据.

我找到了Deedle,我想学习如何使用它,但是我无法直接转换Deedle中的CSV文件中的数据(至少是用F#交互式打印的).

我注意到CsvProvider进行了转换,但经过几天的尝试后,我无法传递数据.

csv f# f#-data deedle

6
推荐指数
1
解决办法
586
查看次数

f#使用ac#library中的函数迭代两个数组

我有一个单词列表和一个相关的词性标签列表.我想使用每个索引元组作为.NET函数的输入同时迭代两个(匹配索引).这是最好的方式(它有效,但对我来说不自然):

let taggingModel = SeqLabeler.loadModel(lthPath + 
                      "models\penn_00_18_split_dict.model");
let lemmatizer = new Lemmatizer(lthPath + "v_n_a.txt")
let input = "the rain in spain falls on the plain"

let words = Preprocessor.tokenizeSentence( input )
let tags = SeqLabeler.tagSentence( taggingModel, words )
let lemmas = Array.map2 (fun x y -> lemmatizer.lookup(x,y)) words tags
Run Code Online (Sandbox Code Playgroud)

arrays iteration f#

5
推荐指数
1
解决办法
1221
查看次数

这是一个F#引用错误吗?

[<ReflectedDefinition>]
let rec x = (fun() -> x + "abc") ()
Run Code Online (Sandbox Code Playgroud)

上面带有递归值的示例代码会产生以下F#编译器错误:

错误FS0432:[<ReflectedDefinition>]术语不能包含前缀拼接运算符'%'的使用

我在上面的代码中看不到任何切片操作符用法,看起来像一个bug ... :)

看起来这只是报价的问题ReflectedDefinitionAttribute,正常报价效果很好:

let quotation =
    <@ let rec x = (fun() -> x + "abc") () in x @>
Run Code Online (Sandbox Code Playgroud)

通过隐藏Lazy.createLazy.force使用产生预期结果:

val quotation : Quotations.Expr<string> =
   LetRecursive
   ([(x, Lambda (unitVar,
        Application
        (Lambda (unitVar0,
            Call (None,
            String op_Addition[String,String,String](String, String),
            [Call (None,
                String Force[String](Lazy`1[System.String]), // `
                [x]), Value ("abc")])),
        Value (<null>)))),
   (x, Call (None, Lazy`1[String] Create[String](FSharpFunc`2[Unit,String]), [x])),
   (x, Call (None, String Force[String](Lazy`1[String]), …
Run Code Online (Sandbox Code Playgroud)

reflection recursion f# quotations

5
推荐指数
1
解决办法
432
查看次数

非常简单的F#形式锁定键盘输入

使用下面的超简单代码,只要在表单处于焦点时按下键盘上的键,表单就会完全锁定.我在F#interactive里面运行它.关闭表单的唯一方法是单击F#interactive中的"重置会话".我已经尝试将事件处理程序添加到KeyPress,结果相同.我添加鼠标事件处理程序,菜单,组合框等没有问题.

我必须做错事,因为在键盘上按键可能不应该是F#此时的错误.有任何想法吗?

// Add reference to System.Windows.Forms to project
open System.Windows.Forms

let a = new Form()
a.Visible <- true
Run Code Online (Sandbox Code Playgroud)

我在Windows XP上使用F#2.0 for Windows + Visual Studio 2008(2010年4月发行版).

谢谢!

.net f#

5
推荐指数
1
解决办法
440
查看次数

什么是MATLAB的MathNet等价物解决C = A\B

我最近开始使用MathNet来实现我们的线性代数,但是我在将MATLAB函数转换为MathNet时遇到了一些麻烦.

在MATLAB中,我经常使用反斜杠运算符来简单求解:

C = A\B

MathNet中的等价物是什么?

我使用C = Inv(A)*B在小矩阵中得到相同的结果,但我不知道结果是否精确.

c# matlab solver math.net

5
推荐指数
2
解决办法
2568
查看次数

JsonProvider 可以反序列化为 Generic.Dictionary 吗?

我正在学习类型提供程序,它看起来像是一个突破性的功能。但是,我无法设法使用 JsonProvider 反序列化 json,以便目标类型具有 Generic.Dictionary 属性。可以使用 Json.NET 来完成。这是代码:

type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">
type ByHand(d:Dictionary<string,int>) =
    member val dict = d with get,set

let text = """{"dict":{"C":3,"D":4}}"""
let newt = JsonConvert.DeserializeObject<ByHand> text
let prov = ByProv.Parse text
printfn "%A" newt.dict.["C"]
//Can only call statically inferred A or B (and it will throw at run-time)
printfn "%A" prov.Dict.A
Run Code Online (Sandbox Code Playgroud)

显然,dict被推断为记录类型,而不是Dictionary默认类型。这可以被覆盖吗?

f# type-providers f#-data

5
推荐指数
1
解决办法
546
查看次数

解析分层CSV的功能方法

我正在尝试创建一段代码,但无法使其正常工作.我能想到的最简单的例子是解析一些CSV文件.假设我们有一个CVS文件,但数据以某种层次结构组织在其中.像这样:

Section1;
        ;Section1.1
        ;Section1.2
        ;Section1.3
Section2;
        ;Section2.1
        ;Section2.2
        ;Section2.3
        ;Section2.4
Run Code Online (Sandbox Code Playgroud)

等等

我这样做了:

let input = 
"a;
;a1
;a2
;a3
b;
;b1
;b2
;b3
;b4
;b5
c;
;c1"

let lines = input.Split('\n') 
let data = lines |> Array.map (fun l -> l.Split(';'))

let sections = 
  data 
  |> Array.mapi (fun i l -> (i, l.[0])) 
  |> Array.filter (fun (i, s) -> s <> "")
Run Code Online (Sandbox Code Playgroud)

我得到了

val sections : (int * string) [] = [|(0, "a"); (4, "b"); (10, "c")|]
Run Code Online (Sandbox Code Playgroud)

现在我想为每个部分创建一个行索引范围列表,如下所示:

[|(1, 3, …
Run Code Online (Sandbox Code Playgroud)

f# functional-programming

4
推荐指数
1
解决办法
696
查看次数

F#使用DataReader

let reader = selectCommand.ExecuteReader()

let getBytesData (x : IDataReader) = 
    let len = reader.GetBytes(1, int64 0, null, 0, 0);
    // Create a buffer to hold the bytes, and then
    // read the bytes from the DataTableReader.
    let buffer : byte array = Array.zeroCreate (int32 len)
    x.GetBytes(1, int64 0, buffer, 0, int32 len) |> ignore
    buffer

let retVal = 
  List [ while reader.Read() do 
           yield (reader.GetString(0), getBytesData reader, 
                  reader.GetDateTime(2)) ]
Run Code Online (Sandbox Code Playgroud)

我有上面的代码从datareader读取bytes [].

getBytesData函数接受reader并从reader返回bytes [].

  • 一切正常但它的getBytesData函数工作非常无功能.
  • 我创建零填充字节数组只是为了创建数组,有没有办法创建动态扩展或固定长度数组

有什么方法可以优化F#吗?

抱歉有点问题,但我已经开始在F#上开设一个新项目来挤出所有的汁液,所以试着让每一条线都达到最佳状态

f#

4
推荐指数
1
解决办法
1254
查看次数

F#TypeProvider"XMLProvider"给出了System.Exception

我正在尝试使用XML类型提供程序处理Twitter推文,如下面的代码所示.使用LINQ XElement函数访问tweet数据值时,代码工作正常,但是在使用XMLProvider创建的类型时,它会失败并出现例外情况:"XML不匹配:预计只有一个'title'子元素".我知道没有给出命名空间,但是,我不知道如果需要它们将如何与提供者一起指定.

// ...

open FSharp.Net
open FSharp.Data

let ns = "http://www.w3.org/2005/Atom"

// General helpers for XML

let xelem s (el: XContainer) = el.Element(XName.Get(s, ns)) 
// ...
let xvalue (el: XElement) = el.Value

let twitterUri = "http://search.twitter.com/search.atom?q=Windows8&rpp=100&lang=en"
type Tweets = XmlProvider<"SampleTweets.xml", Global=false>

let feed = Tweets.Load twitterUri

// title 0 & 1 produce correct values

let title0 = feed.XElement |> xelem "title" |> xvalue
let title1 = feed.XElement |> xelem "entry" |> xelem "title" |> xvalue

// title 2 produces: …
Run Code Online (Sandbox Code Playgroud)

f# type-providers f#-data

4
推荐指数
1
解决办法
783
查看次数