gpt4 book ai didi

减少矩阵比较的计算量

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:24 24 4
gpt4 key购买 nike

我正在编写一种算法来计算元素之间的距离。例如,我有一个包含 3 行和 2 列(学生 A、B 和 C)及其高度的数据集。我必须计算所有元素的距离差并计算矩阵。所有可能的计算都是 A-A、A-B、A-C、B-A、B-B、B-C、C-A、C-B、C-C。但是 A-B 和 B-A 的绝对差是相等的。

目前我使用 if 条件来避免比较相似的元素 (A-A, B-B)。但是还是有重复的计算。我的目标是避免重复计算。

例如,如果 A-B 已完成,则不会计算 B-A,并且 A-B 的值将分配给正确的矩阵位置。如果有人可以就此向我提出建议,那将会很有帮助。

更新:场景:我有 3 files (数据_A、数据_B 和数据_C)。将这些文件视为模型。每个模型都有一组属性(A、B、C、D)。不同的模型有不同的属性。例如data_A (A,B,C),data_B有(A,D,C),data_C有(A,B,C)。

我的目标是根据模型的共同属性比较模型。首先,我扫描模型并找出所有模型共有的属性。在这种情况下,它只有 A 和 C。接下来,我将根据共同属性对每个模型进行成对比较。例如,我将计算 data_A 中的 A 和 data_B 中的 A、data_A 中的 C 和 data_B 中的 C 的欧氏距离。首先,我会计算每对的平方差之和,然后计算该值的平方根。对每个模型对中的所有代谢物对重复此操作,最后平方根距离的累积值将给出模型之间的单一距离值。

我的问题出在我的算法上,如果我比较 data_A 和 data_B,我就不必进行反向计算(即 data_B 和 data_A)。目前我只忽略了使用 if 条件对同一数据集的比较。下面是我的代码。这可能不是最佳的编写方式。

setwd("E:/Assignment")
uniqueDataSets = list.files(pattern = "\\.csv$")
commonVariables = c("A","C")

#To store the distances
results = data.frame(DataSet1 = character(), DataSet2 = character(), Distance=numeric() , stringsAsFactors = F)

for(i in 1:length(uniqueDataSets)) #loading the files as reference file
{
currentDataSetName = uniqueDataSets[i]
currentDataSet = read.csv(currentDataSetName)

for(j in 1:length(uniqueDataSets)) #loading the file as comparison files
{
comparedDataSetName = uniqueDataSets[j]
comparedDataSet = read.csv(comparedDataSetName)

totalDistance = 0
tempDist = 0

if(currentDataSetName != comparedDataSetName) #Ignoring comparison if it's the same data set
{
for(k in 1:length(commonVariables)) #computing pair wise distance for each metabolite
{
var1 = currentDataSet[commonVariables[k]]
var2 = comparedDataSet[commonVariables[k]]

tempDist = sqrt(sum((var1 - var2)^2))
totalDistance = totalDistance + tempDist #cumulative value of the distance between 2 models
}

} else{
totalDistance = 0
}

results = rbind(results, data.frame(DataSet1=currentDataSetName, DataSet2 = comparedDataSetName, Distance =totalDistance))

}
}

最佳答案

R 内置了这个:

x <- matrix(c(1.56, 1.64, 1.75), nrow = 3)
row.names(x) <-c("a", "b", "c")
dist(x)

关于减少矩阵比较的计算量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32281303/

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