【问题标题】:How to match sub-string in arrays of strings in F#如何在F#中匹配字符串数组中的子字符串
【发布时间】:2018-09-27 08:14:02
【问题描述】:

我正在尝试学习机器学习。我是 F# 的新手。 对于给定的数据集,假设我有 2 个字符串数组。

let labels = [|"cat"; "dog"; "horse"|]
let scan_data = [|"cat\1.jpg"; "cat\2.jpg"; "dog\1.jpg"; "dog\2.jpg"; "dog\3.jpg"; "horse\1.jpg"; "horse\2.jpg"; "horse\3.jpg"; "horse\4.jpg"; "horse\5.jpg"|]

您一定猜到了,有 3 个标签(是一种文件夹)包含训练图像数据(共 10 个)。我想使用以上 2 个数组来创建,这样的数组:

let data_labels = [|                //val data_labels : int [] []
                      [|1; 0; 0|];  //since 0th scan_data item represent "cat"
                      [|1; 0; 0|];
                      [|0; 1; 0|];  //since 2nd scan_data item represent "dog"
                      [|0; 1; 0|];
                      [|0; 1; 0|];
                      [|0; 0; 1|];  //since 5th scan_data item represent "horse"
                      [|0; 0; 1|];
                      [|0; 0; 1|];
                      [|0; 0; 1|];
                      [|0; 0; 1|];  
                  |]

因此,只要在“scan_data”项中找到匹配的子字符串(来自“labels”),就应该有一个数组表示匹配为“1”,而没有匹配为“0”。 关于如何在 F# 中实现这一点的任何想法。

【问题讨论】:

    标签: arrays string machine-learning f# functional-programming


    【解决方案1】:
    let helper (str1:string) str2 = if str1.Contains(str2) then 1 else 0
    let t = scan_data |> Array.map (fun item -> labels |> Array.map (helper item) )
    

    【讨论】:

    • 谢谢@boran。像魅力一样工作。
    • 还在试图理解 lambda 函数的输出如何成为一个包含 3 个项目的数组?
    • @sanjog47 - lambda 的输出将是一个包含 3 个项目的数组,因为它执行labels |> Array.map (something),并且Array.map 总是返回一个与其输入数组大小相同的数组。由于 labels 是一个包含 3 个项目的数组,因此 labels |> Array.map (something) 的结果也将是一个包含 3 个项目的数组。请注意,我写的是(something) 而不是(helper item),因为“某物”是什么并不重要。任何时候调用Array.map,输出数组都将与输入数组大小相同,但内容不同。
    • 知道了,helper 将字符串转换为 int,lambda 函数中的 Array.map 将所有三个字符串项转换为 int 1 或 0。F# - 如此令人印象深刻的语言。 :-)
    • @sanjog47 - 没错。实际上,所有函数式编程语言都令人印象深刻,不仅仅是 F#。你可以编写小函数,然后像乐高积木一样将它们组装成更大的积木,然后将更大的积木组装成一个完整的程序。这是我发现的最好的编程技术。另外,顺便说一句,如果您还没有阅读 fsharpforfunandprofit.com,我强烈推荐该站点:F# 中有更多类似的技术,该站点是学习它们的好地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2021-04-28
    • 2023-03-28
    相关资源
    最近更新 更多