gpt4 book ai didi

c# - 填充没有 double 的矩阵

转载 作者:行者123 更新时间:2023-11-30 21:45:04 26 4
gpt4 key购买 nike

我正在研究基于项目的协作过滤器,为此您需要项目之间的相似性。我发现创建如下所示的矩阵效果很好,但我现在想阻止它计算 double 值。

我会用一个例子来解释我的意思。假设您有一个包含 5 个项目的列表,每个项目的相似度都基于评级。

计算相似度后,我得出了以下矩阵:

     I1 | I2 | I3 | I4 | I5 |
I1 | 1 | 0.5| 0.3| 0.2| 0.9|
I2 | 0.5| 1 | 0.2| 0.1| 0.8|
I3 | 0.3| 0.2| 1 | 0.5| 0.1|
I4 | 0.2| 0.1| 0.5| 1 | 0.7|
I5 | 0.9| 0.8| 0.1| 0.7| 1 |

我正在使用以下代码执行此操作:

//allItems is a list of the 5 items
foreach (var item1 in allItems)
foreach (var item2 in allItems)
ComputeSimilarity(item1, item2);

//ComputeSimilarity(); returns a double, a.k.a. the similarity between items

您可以忽略该函数的内部工作原理,因为它工作正常,我只是想不出要更改代码以使其不会对所有内容进行两次计算。

我怎样才能改变这个函数使计算矩阵看起来像这样?

     I1 | I2 | I3 | I4 | I5 |
I1 | | 0.5| 0.3| 0.2| 0.9|
I2 | | | 0.2| 0.1| 0.8|
I3 | | | | 0.5| 0.1|
I4 | | | | | 0.7|
I5 | | | | | |

如果我应该详细说明,请告诉我!提前致谢!

最佳答案

应该这样做:

int n = allItems.Length;

double[,] similarity = new double[n,n];

for (int i = 0; i < n; ++i)
{
for (int j = i + 1; j < n; ++j)
{
similarity[i, j] = computeSimilarity(allItems[i], allItems[j]);
}
}

关于c# - 填充没有 double 的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com