matlab - 如何将 F# Seq 转换为 MWArray

标签 matlab f#

我在 MATLAB 中有一个函数,它有两个参数 1) 交易日期 2) OHLC 和给定股票的交易量并返回一些技术指标,写为

function [MACD, ADO, CHAIK, STOCH] = test(date, pricevolume)
    tsObject = fints(date, pricevolume, {'Open','High','Low','Close','Volume'});
    MACD =  fts2mat(macd(tsObject,'Close'));
    ADO = fts2mat(adosc(tsObject));
    CHAIK = fts2mat(chaikosc(tsObject));
    STOCH = fts2mat(stochosc(tsObject));
end

我使用部署工具创建了一个 .net 程序集,并将它和 MWArray 添加到我的 F# 项目的引用中。在 F# 项目中,我有另一个名为 stockInfo 的函数,它获取股票 ID 并返回股票的价格、数量等。

在我写的F#中使用MATLAB函数

open MathWorks.MATLAB.NET.Arrays
open MathWorks.MATLAB.NET.Utility
open test

//Creates instance of class created by matlab  
let x = new Class1()
//returns price for a stock
let price = stockInfo(1)
let mon = price.Monthly
//creates sequence of dates
let dates = mon |> Seq.map(fun x-> x.Date)
//creates sequence of OHLC and Volume
let pv = mon|> Seq.map(fun x-> x.Open, x.High, x.Low, x.Close, x.Volume)
//I have to call matlab function 
let y = x.test(4, dates, pv)

但是最后一行中的测试函数需要 MWArray 作为它的第二个和第三个参数。

如何将日期序列和 pv 序列转换为 MWArray?

最佳答案

一种方法是避免 F# Seq 并遵循 C# 方式,在这种情况下我必须以这种方式编写

let rows = mon.Count()
let dates = new MWCellArray(rows)
let pvs: double[,] = Array2D.zeroCreate rows 5

for i in 0 .. rows-1 do
    pvs.[i,0] <- mon.[i].Open
    pvs.[i,1] <- mon.[i].High
    pvs.[i,2] <- mon.[i].Low
    pvs.[i,3] <- mon.[i].Close
    pvs.[i,4] <- double mon.[i].Volume
    dates.[[|i+1|]] <- new MWCharArray( mon.[i].Date.Date.ToString())

let pv = new MWNumericArray(pvs)  
let y = x.test(4,dates,pv)

然后我在 y 中得到结果。

关于matlab - 如何将 F# Seq 转换为 MWArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046545/

相关文章:

f# - 嵌套类型提供者

F#报价评估问题

matlab - 避免在双 for 循环中重新计算相同的值

matlab - 使用n点进行姿势估计的稳定性

interop - 动态导入 C/C++ DLL

macos - 如何在Mac上编译任意版本的F#?

xaml - Silverlight 4.0表单初始化问题

image - 如何使用通过PCA获得的特征向量来重新投影我的数据?

matlab - 你如何在 MATLAB 中获取文件的大小?

matlab - Ubuntu 16.04 上缺少 libXp.so 库