我有一个列表,用于存储对象之间的距离。你知道吗
这张桌子看起来像这样:
+----------+----------+----------+----------+----------+
| | Object_A | Object_B | Object_C | Object_D |
+----------+----------+----------+----------+----------+
| Entity_E | 2 | 3 | 6 | 1 |
+----------+----------+----------+----------+----------+
| Entity_F | 3 | 4 | 7 | 2 |
+----------+----------+----------+----------+----------+
| Entity_G | 9 | 1 | 2 | 3 |
+----------+----------+----------+----------+----------+
这些数字表示行和列标题之间的距离。你知道吗
大致计算如下:
entites = [Entity_E, Entity_F, Entity_G]
objects = [Object_A, Object_B, Object_C, Obhect_D]
distances = []
for object in objects:
distanceEntry = []
for entity in entities:
distance = getDistance(entity, object)
distanceEntry.append(distance)
distances.append(distanceEntry)
这大致给了我上表中的信息。你知道吗
我要做的就是找到离每个实体最近的对象(反之亦然)。每个对象或实体只能相互匹配,并且应该基于接近度。你知道吗
我现在做这件事的方法是按距离大小对嵌套列表进行排序(在完整的代码中,我有一种方法可以确定哪个对象与每个距离相关联)。你知道吗
因此,在这样做时,我将创建以下关联:
+----------+----------+----------+
| Entity | Object | Distance |
+----------+----------+----------+
| Entity_E | Object_D | 1 |
+----------+----------+----------+
| Entity_F | Object_D | 2 |
+----------+----------+----------+
| Entity_G | Object_B | 1 |
+----------+----------+----------+
这是不正确的,因为它将对象\u D关联两次。你知道吗
协会应:
+----------+----------+----------+
| Entity | Object | Distance |
+----------+----------+----------+
| Entity_E | Object_D | 1 |
+----------+----------+----------+
| Entity_F | Object_A | 3 |
+----------+----------+----------+
| Entity_G | Object_B | 1 |
+----------+----------+----------+
这正是我在努力的地方——我想不出最好的方法来编写逻辑代码。你知道吗
因为实体更接近对象,所以它应该得到关联。所以,对于实体F,我需要第二个最近的。你知道吗
我想做一些事情,记录哪些对象已经被分配,或者尝试做一些事情,首先匹配每列中的最小值,但是它们似乎都遇到了问题。你知道吗
有没有一个矩阵运算或某种矩阵数学我可以用来做这个计算?你知道吗
任何建议都将不胜感激!你知道吗
编辑-添加完整代码:
# Create an array that stores the distances between each label and symbol. Only calculate the distance for label that
# are "in front" of the symbol.
# Example Table:
# +---------------+--------------+--------------+--------------+--------------+
# | | Label_1 | Label_2 | Label_3 | Label_4 |
# +---------------+--------------+--------------+--------------+--------------+
# | Measurement_1 | 2 | 3 | Not_in_front | 1 |
# +---------------+--------------+--------------+--------------+--------------+
# | Measurement_2 | 3 | 4 | 1 | Not_in_front |
# +---------------+--------------+--------------+--------------+--------------+
# | Measurement_3 | Not_in_front | Not_in_front | 2 | 1 |
# +---------------+--------------+--------------+--------------+--------------+
# Data Structures:
# measurementsDictionary = {['Type', 'Handle', 'X-Coord', 'Y-Coord', 'Z-Coord', 'Rotation', 'True Strike']}
# dipsDictionary = {['Handle', 'Text', 'Unit', 'X-Coord', 'Y-Coord', 'Z-Coord']}
#The two functions below grab the information from a csv-like file.
measurementsDictionary = getMeasurementsInformationFromFile()
dipsDictionary = getDipsInformationFromFile()
exportHeaders = [" "]
exportArray = []
for measurementSymbol in measurementsDictionary:
measurementEntry = measurementsDictionary[measurementSymbol]
measurementCoord = [measurementEntry[2], measurementEntry[3]]
measurementDistance = []
measurementDistance.append(measurementEntry[1])
measurementCartesianAngle = getCartesianAngle(measurementEntry[6])
measurementLineEquation = generateLineEquation(measurementCoord,measurementCartesianAngle)
for dip in dipsDictionary:
dipEntry = dipsDictionary[dip]
dipCoord = [dipEntry[3],dipEntry[4]]
isPointInFrontOfLineTest = isPointInFrontOfLine(measurementCartesianAngle, measurementLineEquation, dipCoord)
if isPointInFrontOfLineTest == 1:
measurementSymbolDistance = calculateDistance(measurementCoord, dipCoord)
# string = dipEntry[0] +":" + str(measurementSymbolDistance)
# measurementDistance.append(string)
measurementDistance.append(measurementSymbolDistance)
elif isPointInFrontOfLineTest == 0:
string = ""
measurementDistance.append(string)
exportArray.append(measurementDistance)
for dip in dipsDictionary:
dipEntry = dipsDictionary[dip]
exportHeaders.append(dipEntry[0])
exportedArray = [exportHeaders] + exportArray
export = np.array(exportedArray)
np.savetxt("exportArray2.csv", export, fmt='%5s', delimiter=",")
print(exportHeaders)
不久前,我为PE345编写了一些代码来解决类似的问题。我将使用我自己的数组:
你要做的是得到选择一个特定元素的成本。通过计算选择一行的成本,加上选择一列的成本,然后减去选择元素本身的成本。所以在我的数组中,选择元素
[0][0]
的代价是(1+2+3)+(1+4+7)-3*(1)
。我对第0行求和,对第0列求和,然后减去元素本身。你知道吗现在你有了选择每个元素的成本。找到成本最高的元素。这将是网格中的最低值。选择它并确保行或列中不能选择其他值。重复此操作,直到选择了每行和每列中的值。你知道吗
这是我项目的源代码。请注意,它找到的是最高值,而不是最低值。你知道吗
相关问题 更多 >
编程相关推荐