【问题标题】:Translate numpy digitize function into c#将numpy digitize函数翻译成c#
【发布时间】:2021-04-01 19:33:12
【问题描述】:

Digitize 函数返回输入数组中每个值所属的 bin 的索引。

以下代码来自 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# 实现相同的结果?

【问题讨论】:

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

标签: python c# translate indices binning


【解决方案1】:

也许

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

【讨论】:

    【解决方案2】:

    您可以编写自己的 digitize 函数,将两个数组作为参数。

    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);
        }
    }
    

    您还可以使用 Array.BinarySearch 函数来提高执行时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多