모양이 (6023, 6023) 인 numpy 배열이 있습니다. 실제로 이것은 몇 개의 "서브 레이"의 조합입니다. 즉, 어레이의 각 측면의 몇 부분에 이름을 부여 할 수 있으며 서브 어레이는 이러한 "이름"의 상호 작용을 보여줍니다. 이름은 양쪽에서 동일합니다 (데이터는 주 대각선 주위에서 유사합니다). 이것이 어레이가 실제로 구성하는 것입니다. 다음은 내가 하위 배열이라고 부르는 부분의 경계 좌표와 각각의 이름입니다.
boundaris = [(0, 68), (68, 1190), (1190, 2248), (2248, 3399), (3399, 4795), (4795, 6023)]
names = ('4', 'X', '2R', '2L', '3R', '3L')
그래서 바로 구석에 '4'와 '4'의 상호 작용을 가진 데이터의 제곱이 있습니다. '4'- 'X', 'X'- '4', 'X'- 'X'에 가깝습니다. 등등. 그것이 모두 불분명하다면 나는 아마도 내가 의미하는 바를 명확히 할 사진을 만들 수있을 것이다.
그래서 질문은 : 이름이 다른 순서로 들어가도록 하위 배열을 어떻게 재 배열합니까? ( '2L', '2R', '3L', '3R', '4', 'X')
업데이트 1
사진을 올리기 전에 다르게 설명해 보겠습니다. 상황은 본질적으로 다음과 동일합니다. 상호 작용에 해당하는 6 * 6 = 36 배열이 있습니다 : '2L'- '2L', '2L'- '2R', '2L'- '3L', ..., '더블 엑스'. 모든 배열이 논리적으로 일관되고 이름 순서 ( '2L', '2R', '3L', '3R', '4', 'X')로 배치되도록 배열을 만드는 방법 최종 배열의 양쪽에?
업데이트 2
나는 내가 필요로하는 계획을 세웠는데, 그것이 해결되기를 바랍니다.
이것이 제가 처음에 가지고있는 것입니다.
Small rectangles inside the big square represent the 'subarrays'. Each of them contains many 'cells', for example, '4'-'4' (the smallest one) contains 68^2=4624 cells. The whole array contains 6023^2=36276529 'cells'.
Then I want to rearrange the subarrays, so that the names go in a different order:
This is how it should look after the transformation. I happen to know the final coordinates for the boundaries of names, but they are not difficult to calculate. Hopefully, you can see what I want to do: rearrange parts of a big array (essentially, smaller arrays), so that they form an array with different location of 'names' along it's axes.
이것은 입력 배열의 이름과 블록의 재 배열을 수행합니다. 블록 재배 열의 핵심은 numpy.ix_
Matlab과 유사한 인덱싱을 허용 하는 기능입니다.
boundaris = [(0, 68), (68, 1190), (1190, 2248), (2248, 3399), (3399, 4795), (4795, 6023)]
names = ('4', 'X', '2R', '2L', '3R', '3L')
A = numpy.random.random((6023, 6023))
neworder = [3, 2, 5, 4, 0, 1]
def rearrange(l):
return [l[i] for i in neworder]
newnames = rearrange(names)
ranges = numpy.concatenate([numpy.arange(l, u) for l, u in rearrange(boundaris)])
newA = A[numpy.ix_(ranges, ranges)]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다