Python 将numpy数字化函数转换为c#

Python 将numpy数字化函数转换为c#,python,c#,translate,indices,binning,Python,C#,Translate,Indices,Binning,Digitalize函数返回输入数组中每个值所属的存储单元的索引 下面的代码来自python- x = np.array([0.8, 6.9, 3.5, 1.9]) bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0]) inds = np.digitize(x, bins) print(inds) array([1, 4, 3, 2]) 我如何使用C#实现相同的结果?也许 public static IEnumerable<int> Digitiz

Digitalize函数返回输入数组中每个值所属的存储单元的索引

下面的代码来自python-

x = np.array([0.8, 6.9, 3.5, 1.9])
bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])
inds = np.digitize(x, bins)
print(inds)
array([1, 4, 3, 2])
我如何使用C#实现相同的结果?

也许

public static IEnumerable<int> Digitize(double[] input, double[] source)
{
   foreach (var item in input)
      for (var index = 0; index < source.Length-1; index++)
         if (item > source[index] && item < source[index+1])
         {
            yield return index;
            break;
         }
}
输出

var input = new [] { 0.2, 6.4, 3.0, 1.6 };
var bins = new[] { 0.0, 1.0, 2.5, 4.0, 10.0 };

var results = Digitize(input, bins);

Console.WriteLine(string.Join(", ", results));
0, 3, 2, 1

您可以编写自己的数字化函数,该函数将两个数组作为参数

using System;

public class Test
{       
    static int findBinIndex(double input, double[] bins) {
        for(int i=1; i<bins.Length; i++){
           if(input < bins[i]) {
              return i;
           }
        }
        return bins.Length;
    }

    static void digitize(double[] x, double[] bins) {
        for(int i=0;i<x.Length;i++){
            System.Console.WriteLine(findBinIndex(x[i], bins));
        }
    }
    public static void Main()
    {
        double[] x = new double[] {0.8, 6.9, 3.5, 1.9};
        double[] bins = new double[] {0.0, 1.0, 2.5, 4.0, 10.0};
        digitize(x, bins);
    }
}
使用系统;
公开课考试
{       
静态int findBinIndex(双输入,双[]箱){

例如(int i=1;我如何用你自己的话解释它的作用(确切地说),给出输出示例,并向我们展示你的尝试。@将军:我想我们都知道这不会发生!@MitchWheat是的,我可能有点乐观:)似乎解释了
digitalize
应该做什么:对于
x
中的每个项目,此方法返回数组值所属的bin的索引
i
。索引是
x
的值满足以下条件之一的地方:
bin[i-1]bin[i]
(取决于bin值是变大还是变小)。您只需要在C#中编写这样做的代码。使用IronPython并导入它。