짧은 이야기입니다 : 논리 0 또는 다른 방법을 사용하여 배열에서 정확한 지점을 삭제하려고합니다.numpy 배열 값 (논리 0)을 삭제하십시오.
나는 날개를 정의하는 몇 점의 좌표로 시작합니다. 그 (것)들과, 나는 교차 선없이 좋은 다각형을 형성하는 것을 시도하고있다. 이것은 점 1 (임의의 한 점)에서 시작하여 다음 점을 첫 번째 점에 가장 가까운 점으로 채움으로써 수행됩니다.
좌표는 xEdge 및 yEdge로로드됩니다. 내가하는 첫 번째 일은 다음과 같이 그 안에 0 만있는 복사본을 만드는 것입니다. xEdgeOrdered 및 yEdgeOrdered는 다각형 점으로 채워집니다. 또한 어떤 값이 이미 다각형에 의해 검사되었는지를 확인하는 데 사용될 것 인 객체로만 하나를 만들 것입니다.
예를 들어 y- 최대 값으로 폴리곤을 시작하면 여기에서 문제가 시작됩니다. 나는 [시작 인덱스] = 0 NOTUSED 상태 마지막 줄에서
startIndex = np.argmax(yEdge)
xEdgeOrdered[0] = xEdge[startIndex]
notUsed[startIndex] = 0
는, 내가 정말 할 노력하고있어 논리 0으로 "사용 된"값을 대체입니다 - MATLAB에서 "거짓". 이 값은 더 이상 도달 할 수 없으며 배열에서 기본적으로 삭제된다는 것이 목표입니다.
나는 그것을 마스크하려고했으나 (아래 참조), 스크립트의 다음 단계에서 완벽하게 작동하지 않는다.
notUsed = np.ma.masked_where(notUsed == 0, notUsed)
다음 단계는 다음 가장 가까운 점을 찾는 루프입니다. 먼저 단어에서 내가 무엇을하려고하는지 설명하려고 시도하고 (나중에 작동하지 않는 ...) 내 코드를 첨부 할 것입니다.
초기 지점 1부터 시작하여 벡터 길이를 사용하여 다음 가장 가까운 지점을 찾아야합니다. 나는 나머지 모든 점들을 시도 할 것이다. 어떤 점이 나머지 점인지 알기 위해 필자는 함수에 "notUsed"라는 인수를주었습니다. 포인터는 사용되지 않으면 "1"을 사용하고 0이 사용되면 0으로 배열을 기억합니다 (0은 "false"를 의미합니다. "그러나 우리는 아직 어떻게 발견되지 않았다). 은 내가 무슨 짓을하는 것은 최소 값이 발견되면 값 = 0 마스크해야
, 인덱스 위치가 기록 된 것을 요청 후, 우리는 그냥 0으로 사용되는 값을 설정 xEdgewhile로 xEdge의 탄소 복사본을 만들 수 있습니다 . 이것을 사용하여 xEdgeOrderedn에서이 새로운 점을 채우고이 새로운 점에서 시작하는 루프를 계속할 수 있습니다. 그러나 그 전에는 방금 사용한 색인을 삭제하여 더 이상 액세스 할 수 없도록해야합니다. 우리가 matlab에 있다면, 우리는 notUsed (index) = false; - 질문은 파이썬에서 어떻게 할 수 있는가? 도움이된다면
i, z, min = 1, 0, 'inf'
xEdgewhile = xEdge + []; yEdgewhile = yEdge + [];
while i < len(xEdge):
i = i + 1
notUsedIndices = indexVector #This line might be useless
while z < len(xEdge):
distance = math.sqrt((xEdgewhile[z] - xEdgeOrdered[(i-1)])**2 + (yEdgewhile[z] - yEdgeOrdered[(i - 1)])**2)
if distance < min:
min, distance_min, = distance, z
z = z + 1
print min
xEdgeOrdered[i] = xEdge[distance_min]
yEdgeOrdered[i] = yEdge[distance_min]
xEdgewhile[distance_max], yEdgewhile[distance_min] = 0, 0
xEdgewhile = np.ma.masked_where(xEdgewhile == 0, xEdgewhile)
yEdgewhile = np.ma.masked_where(yEdgewhile == 0, yEdgewhile)
이 참고로, 나는 또한 당신에게 MATLAB 코드를 제공 할 수 있습니다
이것은 내가 생각 해낸 코드입니다. 긴 이야기하자면, 논리 0 또는 다른 방법을 사용하여 배열의 정확한 점을 삭제하려고합니다.
NaN 또는 inf에 사용하지 않으려는 값을 설정하지 않는 이유는 무엇입니까? – Trogdor