我需要使用几何分布的随机数生成器
http://en.wikipedia.org/wiki/Geometric_Distribution。
我想MathNet.Numerics.Distributions:
public void GeometricTest()
{
var geometric = new Geometric(0.1);
int back = geometric.Sample();
Assert.Greater(back, -1);
}
Run Code Online (Sandbox Code Playgroud)
但是测试只给出负数。是否有人发现我的错误或给我其他采样几何分布方式的建议?
我有一个IEnumerable<double>数据样本.我想计算信号/数据的90%置信区间.我有MathNET库,但我对如何正确使用库感到困惑.根据我的数据,我们的想法是返回两个包含原始信号置信区间的附加数据数组
using MathNet.Numerics.Statistics;
using MathNet.Numerics.Distributions;
public static List<double[]> ConfidenceIntervals(IEnumerable<double> sample, double interval)
{
Contract.Requires(interval > 0 && interval < 1.0);
int sampleSize = sample.Count();
double alpha = 1.0 - interval;
double mean = sample.Mean();
double sd = sample.StandardDeviation();
double t, mu;
double[] upper = new double[sampleSize];
double[] lower = new double[sampleSize];
StudentT studentT = new StudentT(mean, alpha, sampleSize - 1);
int index = 0;
foreach (double d in sample)
{
t = studentT.CumulativeDistribution(d);
double tmp = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Math.NET来解决以下系统:
系数矩阵A:
var matrixA = DenseMatrix.OfArray(new[,] {
{ 20000, 0, 0, -20000, 0, 0, 0, 0, 0 },
{ 0, 666.66666666666663, 2000, 0, -666.66666666666663, 2000, 0, 0, 0 },
{ 0, 2000, 8000, 0, -2000, 4000, 0, 0, 0 },
{ -20000, 0, 0, 20666.66666666666663, 0, 2000, -666.66666666666663, 0, 2000 },
{ 0, -666.66666666666663, -2000, 0, 20666.66666666666663, -2000, 0, -20000, 0 },
{ 0, 2000, 4000, 2000, -2000, 16000, -2000, 0, 4000 },
{ 0, 0, 0, -666.66666666666663, 0, -2000, …Run Code Online (Sandbox Code Playgroud) 假设我有:
double[] someArray = new [] { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44 };
是否有任何开箱即用的方法可以从此数组中创建 4x4 矩阵,而不必自己将其拆分为 4 个数组?
我知道这样做很简单,但我正在探索开箱即用的准备情况。
编辑
抱歉不清楚(认为标题是):
我想知道的是 Math.NET Numerics 中的矩阵生成器是否具有开箱即用的功能。就像是:
Matrix<double> someMatrix = DenseMatrix.OfArray(columns: 4, rows: 4, data: someArray);
玩F#,我试图以更实用的方式思考代码.我工作的很大一部分恰好是数字化的,所以我在想这种再教育是否有意义.是否正在以一种功能性的方式编写数字代码,例如试图在圆孔中安装方形钉,或者它只是一个陡峭的学习曲线而不管应用程序如何?
例如,让我们拿一个片段来演示大数的弱定律:
open System
open System.IO
open System.Windows.Forms
open System.Windows.Forms.DataVisualization
open FSharp.Data
open FSharp.Charting
open FSharp.Core.Operators
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.Random
open MathNet.Numerics.Distributions
open MathNet.Numerics.Statistics
let T = 1000
let arr1 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
arr1.[i] <- [|for j in 1..i do yield Exponential.Sample(0.1)|] |> Statistics.Mean
let arr2 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
arr2.[i] <- arr1.[1 .. i] …Run Code Online (Sandbox Code Playgroud) 给定以下xs和ys集合:
xs = [8294400,2073600,921600,409920]
ys = [124,433,853,1449]
在Excel中使用幂律可以得到一个很好的近似值:

Excel找到了表单的一个功能a(x^b).怎样才能确定a并b在C#中?我尝试使用Math.Net数字,但我没有看到任何适用于此形式的函数的方法.线性回归模块中的所有函数只能找到各种形式函数的线性系数,但似乎没有一个能够确定指数.
我必须在c#(MathNet)中移植一些python(numpy)代码。我可以用python编写:
mtx = np.array([[0,1,2],[3,4,5]])
mtx[0,:] *= 1.23 #multiply all elements in row 0 by 1.23
Run Code Online (Sandbox Code Playgroud)
如何在MathNet中做到这一点?是否有比以下更好(更快)的解决方案:
mtx = np.array([[0,1,2],[3,4,5]])
mtx[0,:] *= 1.23 #multiply all elements in row 0 by 1.23
Run Code Online (Sandbox Code Playgroud)
?
我正在使用 MathNet .dll 并且必须计算十进制值数组的平均值和标准偏差。
using MathNet.Numerics.Statistics;
static void Main(string[] args)
{
decimal[] values = { 39.99m, 29.99m, 19.99m, 49.99m };
MathNet.Numerics.Statistics.
}
Run Code Online (Sandbox Code Playgroud)
但我没有得到计算均值的方法。我必须执行许多数学运算但没有起点。如果有人能指出我正确的方向,我将不胜感激。我试过但找不到任何样本,以便我可以使用其余数学运算的信息。我必须使用 MathNet 库。谢谢
完整代码
using System;
using MathNet.Numerics.Statistics;
using System.Linq;
public class Program
{
public static void Main()
{
decimal[] values = new[] { 39.99m, 29.99m, 19.99m, 49.99m };
Tuple<double, double> meanStd = values
.Select(x => (double)x)
.MeanStandardDeviation();
double mean = meanStd.Item1;
double std = meanStd.Item2;
Console.WriteLine("Mean = " + mean);
Console.WriteLine("Std = " + std);
}
}
Run Code Online (Sandbox Code Playgroud) 不知道如何满足stackoverflow对这个的需求......
我想修改MathNET Numerics包,以便我可以使用索引器访问或分配子矩阵,如下所示:
A[rows, cols]
Run Code Online (Sandbox Code Playgroud)
其中,rows和cols是int[]
我编写了一个扩展方法Sub(int [] rows,int [] cols),它实现了相同的目标,但是使用索引方式会更聪明.
是否可以添加索引器的扩展而无需重建整个包?如果是这样的话?
我正在MathNet.Numerics.LinearAlgebra建立一个图书馆.我需要将一个用户指定的函数应用于矩阵的每个元素,我知道我可以使用它Map:
open System
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.LinearAlgebra.Double
let m1 = matrix [[1.0; 2.0; 3.0]]
let f1 = fun s -> s * 3.14
let m2 = m1.Map f1 // THIS FAILS
let m3 = m1.Map (fun s -> s * 3.14) // THIS WORKS!
Run Code Online (Sandbox Code Playgroud)
在m2我的行中得到以下错误:
This expression was expected to have type Func<float, 'a> but here has type double -> double
Run Code Online (Sandbox Code Playgroud)
但我需要能够传递映射函数,而不是将其定义为内联m3.该文档MathNet.Numerics似乎没有解决我的问题.
在此先感谢您的帮助.
mathnet-numerics ×10
c# ×7
math.net ×4
.net ×2
f# ×2
matrix ×2
arrays ×1
distribution ×1
indexing ×1
math ×1
packages ×1
performance ×1
python ×1
random ×1