C# 快速矩阵修改

问题描述 投票:0回答:1

我有一个已排序的双精度值列表。 [100.3、100.7、101.1、...、4000.2]。

我有一个

Matrix<double>
,大小为 4096 * 4096,包含值

对于矩阵的每个值,我想获取排序列表中最接近值的索引,并用该索引替换当前的

matrix[i,j]
值。

到目前为止我有这个:

//Fill list from file
List<double> valueList = new List<double>();
string[] dataLine = File.ReadAllLines(listDataPath);
foreach (string line in dataLine)
{
    valueList.Add(float.Parse(line.Replace('.', ',')));
}


//Create 4k matrix with values between 1000 and 3000 for example
int rows = 4096;
int columns = 4096;
var rand = new Random();

Matrix<double> mat = new(rows, columns);
Parallel.For(0, rows, i =>
{
    for (int j = 0; j < columns; j++)
        mat[i, j] = 1000f + (double)rand.NextDouble() * 2000f;
});

Stopwatch cs = new();
cs.Start();

Parallel.For(0, rows, i =>
{
    for (int j = 0; j < columns; j++)
    {
         double newValue = valueList.BinarySearch(mat[i, j]);
         mat[i, j] = newValue;
    }
});
cs.Stop();
MessageBox.Show(cs.ElapsedMilliseconds.ToString());

执行此操作大约需要1秒。我已经使用过

Parallel.For
BinarySearch
。有没有更高效的方法?

c# matrix
1个回答
0
投票

您是否尝试过二分搜索以外的方法?插值搜索还是KD树(数据结构)?或者您怀疑当前方法中是否有任何特定部分会减慢速度?

© www.soinside.com 2019 - 2024. All rights reserved.