개체 사이의 거리를 저장하는 데 사용한 목록의 목록이 있습니다.NxN 배열의 행 및 열에서 가장 낮은 값을 결정합니다.
표는 다음과 같은 :
+----------+----------+----------+----------+----------+
| | 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)
이
대략 위의 표에있는 정보를 나에게 주었다.기본적으로 각 엔티티에 가장 가까운 개체를 찾습니다 (또는 그 반대). 각 객체 또는 엔티티는 다른 객체 또는 엔티티와 만 일치 할 수 있으며 근접성을 기반으로해야합니다.
내가 지금까지 해본 방법은 거리의 크기로 중첩 목록을 정렬하는 것입니다 (전체 코드에서 각 객체가 각 거리와 관련되어 있는지를 결정하는 방법이 있습니다).
그래서, 나는 다음과 같은 연결을 만들 것이라고 일에 : 그것은 두 번 Object_D를 연결하기 때문에
+----------+----------+----------+
| Entity | Object | Distance |
+----------+----------+----------+
| Entity_E | Object_D | 1 |
+----------+----------+----------+
| Entity_F | Object_D | 2 |
+----------+----------+----------+
| Entity_G | Object_B | 1 |
+----------+----------+----------+
이 올바르지 않습니다.
협회는해야한다 :
+----------+----------+----------+
| Entity | Object | Distance |
+----------+----------+----------+
| Entity_E | Object_D | 1 |
+----------+----------+----------+
| Entity_F | Object_A | 3 |
+----------+----------+----------+
| Entity_G | Object_B | 1 |
+----------+----------+----------+
이것은 내가 고민하고있는 곳입니다 -이에 대한 코드 로직에 가장 좋은 방법을 알아낼 수 없습니다.
Entity_E가 Object_D에 더 가깝기 때문에 연관을 가져야합니다. 그래서, Entity_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)
전체 코드를 추가 할 수 있습니까? – sera
가능한 한 많은 코드를 편집하고 추가했습니다! – labourday