3

Math.Net 中是否有类似(MatLab/Octave/numpy)的 linspace() 的函数,它接受 3 个参数(最小值、最大值、长度)并在最小值和最大值之间创建一个均匀间隔值的向量/数组?实现起来并不难,但如果已经有一个功能,我更愿意使用它。

4

3 回答 3

4

没有一个与 linspace完全一样,但信号发生器非常接近并创建了一个数组:

SignalGenerator.EquidistantInterval(x => x, min, max, len)

我对 VB.net 语法并不新鲜,但我想它非常接近 C#。

如果您需要矢量:

new DenseVector(SignalGenerator.EquidistantInterval(x => x, min, max, len))

或者您可以使用静态 Create 函数来实现它(实际上您可能希望预先计算该步骤):

DenseVector.Create(len, i => min + i*(max-min)/(len - 1.0))

2013 年 12 月 14 日更新:

从 v3.0.0-alpha7 开始,这被两个新功能覆盖:

  • Generate.LinearSpaced(length, a, b)-> MATLABlinspace(a, b, length)
  • Generate.LinearRange(a, [step], b)-> MATLABa:step:b
于 2013-06-11T17:47:06.953 回答
1

我使用这个 C# 代码来复制 linspace 的功能(numpy 是如何做到的),请随意使用。

public static float[] linspace(float startval, float endval, int steps)
{
    float interval = (endval / MathF.Abs(endval)) * MathF.Abs(endval - startval) / (steps - 1);
    return (from val in Enumerable.Range(0,steps)
            select startval + (val * interval)).ToArray(); 
}

这是我做的VB翻译。

Public Function linspace(startval As Single, endval As Single, Steps As Integer) As Single()

    Dim interval As Single = (endval / Math.Abs(endval)) *(Math.Abs(endval - startval)) / (Steps - 1)
    Return (From val In Enumerable.Range(0, Steps) Select startval + (val * interval)).ToArray()

End Function

使用示例;

C#

float[] arr = linspace(-4,4,5)

VB

Dim arr as Single() = linspace(-4,4,5)

结果:

-4,-2,0,2,4
于 2021-04-16T19:18:36.703 回答
0

我检查了下面显示的代码和 MATLAB linspace 的结果,它完全匹配。我自己将它用于我在蒙特卡洛实现方面的研究工作。

下面是代码图像和实际代码。

static double[] LINSPACE(double StartValue, double EndValue, int numberofpoints)
    {

        double[] parameterVals = new double[numberofpoints];
        double increment = Math.Abs(StartValue - EndValue) / Convert.ToDouble(numberofpoints - 1);
        int j = 0; //will keep a track of the numbers 
        double nextValue = StartValue;
        for (int i = 0; i < numberofpoints; i++)
        {


            parameterVals.SetValue(nextValue, j);
            j++;
            if (j > numberofpoints)
            {
                throw new IndexOutOfRangeException();
            }
            nextValue = nextValue + increment;
        }
        return parameterVals;



    }

在 C# 中创建 linspace 函数的代码

于 2020-04-14T05:00:02.477 回答