Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# DenseMatrix无效分配_F#_Mathnet Numerics - Fatal编程技术网

F# DenseMatrix无效分配

F# DenseMatrix无效分配,f#,mathnet-numerics,F#,Mathnet Numerics,不确定如何填充DensMatrix类型: let rows = [|for line in File.ReadAllLines("Z:\\mypath.csv") |> Seq.skip 1 do yield line.Split(',') |> Array.map float|] let data = DenseMatrix.ofRowArrays rows let mutable data_logdiff = DenseMatrix.zero<fl

不确定如何填充DensMatrix类型:

let rows = [|for line in File.ReadAllLines("Z:\\mypath.csv") 
            |> Seq.skip 1 do yield line.Split(',') |> Array.map float|]
let data = DenseMatrix.ofRowArrays rows
let mutable data_logdiff = DenseMatrix.zero<float> (data.RowCount-1) (data.ColumnCount)

for i in [0 .. data.ColumnCount-1] do
    for j in [1 .. data.RowCount-1] do
        data_logdiff.At(j-1, i) <- data.At(j, i) / data.At(j-1, i) |> log
let rows=[|表示文件中的行。ReadAllLines(“Z:\\mypath.csv”)
|>Seq.skip 1 do yield line.Split(',')|>Array.map float |]
让data=DenseMatrix.ofRowArrays行
设可变数据_logdiff=DenseMatrix.zero(data.RowCount-1)(data.ColumnCount)
对于[0..data.ColumnCount-1]中的i
对于[1..data.RowCount-1]do中的j
(j-1,i)处的数据差异日志
最后一行生成错误“无效分配”

我也想知道是否有一种功能性的方式来表达上述逻辑


谢谢。

我假设您使用的是MathNet,不知道是哪个版本

首先,我认为你的
数据不需要是可变的,它已经是一个属性可以改变的对象,我的意思是你想改变它的属性,而不是对象本身

那么代码中的问题是如何修改这些属性,应该使用索引器而不是
。在
处,索引器将只返回值:

#r @"packages\MathNet.Numerics.3.8.0\lib\net40\MathNet.Numerics.dll"
#r @"packages\MathNet.Numerics.FSharp.3.8.0\lib\net40\MathNet.Numerics.FSharp.dll"

open System.IO
open MathNet.Numerics.LinearAlgebra

let rows = [|for line in File.ReadAllLines("Z:\\mypath.csv") 
        |> Seq.skip 1 do yield line.Split(',') |> Array.map float|]
let data = DenseMatrix.ofRowArrays rows
let data_logdiff = DenseMatrix.zero<float> (data.RowCount-1) (data.ColumnCount)

for i in [0 .. data.ColumnCount-1] do
    for j in [1 .. data.RowCount-1] do
        data_logdiff.[j-1, i] <- data.At(j, i) / data.At(j-1, i) |> log

一般来说,每次使用<代码> .0/COD>和循环初始化矩阵或向量时,都要考虑使用<代码> init 函数,这需要一个附加的参数,这个参数类似于循环体。

< P>我假定你在使用MaTNET,不知道哪个版本。

首先,我认为你的
数据不需要是可变的,它已经是一个属性可以改变的对象,我的意思是你想改变它的属性,而不是对象本身

那么代码中的问题是如何修改这些属性,应该使用索引器而不是
。在
处,索引器将只返回值:

#r @"packages\MathNet.Numerics.3.8.0\lib\net40\MathNet.Numerics.dll"
#r @"packages\MathNet.Numerics.FSharp.3.8.0\lib\net40\MathNet.Numerics.FSharp.dll"

open System.IO
open MathNet.Numerics.LinearAlgebra

let rows = [|for line in File.ReadAllLines("Z:\\mypath.csv") 
        |> Seq.skip 1 do yield line.Split(',') |> Array.map float|]
let data = DenseMatrix.ofRowArrays rows
let data_logdiff = DenseMatrix.zero<float> (data.RowCount-1) (data.ColumnCount)

for i in [0 .. data.ColumnCount-1] do
    for j in [1 .. data.RowCount-1] do
        data_logdiff.[j-1, i] <- data.At(j, i) / data.At(j-1, i) |> log

一般来说,每次使用<代码> 0 和一个循环来初始化一个矩阵或向量时,都要考虑使用<代码> .init < /Cult>函数,它需要一个附加的参数,这是一个类似循环体的参数。

不要假设每个人都知道你使用的是哪一个库,你已经打开了哪些命名空间,将它们包含在代码中。不要假设每个人都知道您使用的是哪个库以及您打开的是哪个命名空间,请将它们包含在代码中。非常流畅。谢谢,非常圆滑。谢谢