2017-12-24 4 views
0

나는 인덱스의 다차원 배열을 가지고 있는데, 어떻게 이것들로부터 Boolean 배열을 만들 수 있습니까? 1 차원 케이스의 경우 그 결과는 다음과 같습니다numpy에서 인덱스 배열로 부울 배열을 만드는 방법은 무엇입니까?

a = [1,5,6] 
b = somefunction(total_array_length=10, a) 
>>> [False, True, False, False, False, True, True, False, False, False] 

을가 같을 것이다 차원 케이스의 경우 :

a = [[1,3],[4,2]] 
b = somefunction(total_array_length=5, a) 
>>> [[False, True, False, True, False], [False, False, True, False, True]] 

내가 배열에 대한 마스크를 만들려면이를 사용하고 싶습니다. 나는 차원 8의 다차원 배열을 가지고 있으며, 마지막 축에 대해 유지하고자하는 요소의 인덱스를 찾을 수 있습니다. 즉, 마지막 축을 원래 배열에 유지하고자하는 모든 인덱스로 구성하는 8D 배열이 있습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

위의 함수에서 total_array_length은 원래 배열의 길이와 같습니다.

그래서 모양의 배열 (23,5,76,32,1,3,8,9)을 가진 모양 배열 (23,5,76,32,1,3, 8,4)? Note 4 < 9 그러나 치수가 같지 않은 것을 제외하고는. 첫 번째 경우를 들어

a.shape = (23,5,76,32,1,3,8,4) 
b = somefunction(total_array_length=9, a) 
b.shape =(23,5,76,32,1,3,8,9) 
+0

이 total_array_length'가 무엇인지 '명확하지 왜 b''의 형태 중 하나의 예에서 A''의 모양과 일치하지 않습니다 . 또한 8d 배열의 마지막 축에 대해 무엇을 말하려고하는지 명확하지 않습니다. 그것은 당신의 예제와 비슷하게 들리지 않습니다. – Imran

+0

코드를 작성하고 게시자가 붙어있는 경우 게시하십시오. 우리가 처음부터 시작하도록 요구하지 마십시오. –

+0

내가 더 명확하게 만들었습니까? –

답변

1

: 빠른 가능성이

In [23]: a = [1,5,6] 
In [24]: b = np.zeros(10, dtype=bool) 
In [25]: b[a] = True 
In [26]: b 
Out[26]: array([False, True, False, False, False, True, True, False, False, False], dtype=bool) 

똑같이 간단하며, 목록 버전 :

In [27]: [True if i in a else False for i in range(10)] 
Out[27]: [False, True, False, False, False, True, True, False, False, False] 

그리고 이해를 나열 단지 둥지 목록의 목록 :

In [34]: [[True if i in a1 else False for i in range(5)] for a1 in a] 
Out[34]: [[False, True, False, True, False], [False, False, True, False, True]] 

배열 ve rsion이 두 번째 경우이다 것은 : a의 하위 목록이 모두 같은 길이의 경우

In [41]: a = [[1,3],[4,2]] 
In [42]: b = np.zeros((len(a),5), bool) 
In [43]: b[[[0],[1]],a] 
Out[43]: 
array([[False, False], 
     [False, False]], dtype=bool) 
In [44]: b[[[0],[1]],a]=True 
In [45]: b 
Out[45]: 
array([[False, True, False, True, False], 
     [False, False, True, False, True]], dtype=bool) 

이를하지만에만 작동합니다. 이들이 다르다면 나는 평평한 버전으로 작업해야한다고 생각합니다. 실제로 2d 케이스를 원래 1d로 바꾸십시오.

In [49]: a = [[1,2,3],[4,2],[1]] 
In [50]: [[True if i in a1 else False for i in range(5)] for a1 in a] 
Out[50]: 
[[False, True, True, True, False], 
[False, False, True, False, True], 
[False, True, False, False, False]] 

그러나 배열 버전은 더 복잡 조금입니다 : 비정형 a를 들어


는 목록 버전은 여전히 ​​쉽게 행과 열을 위해, 인덱스의

구성이 개 배열 :

In [53]: a0 = np.repeat(np.arange(3),[len(i) for i in a]) 
In [54]: a0 
Out[54]: array([0, 0, 0, 1, 1, 2]) 
In [55]: a1 = np.hstack(a) 
In [56]: a1 
Out[56]: array([1, 2, 3, 4, 2, 1]) 

동등한 색인 생성 (1d) 색인 생성 :

In [57]: np.ravel_multi_index((a0,a1),(3,5)) 
Out[57]: array([ 1, 2, 3, 9, 7, 11], dtype=int32) 

flat을 통해 2 차원 배열에 적용 :

In [58]: b = np.zeros((3,5),bool) 
In [59]: b.flat[Out[57]] = True 
In [60]: b 
Out[60]: 
array([[False, True, True, True, False], 
     [False, False, True, False, True], 
     [False, True, False, False, False]], dtype=bool) 
+0

인덱스 배열 모양 (23,5,76,32,1,3,8,4)을 사용하여 모양 배열 (23,5,76,32,1,3,8,9)에 대해 어떻게하면됩니까? ? 주 4 <9 이외에는 치수가 동일합니다. –

+0

어레이를 (n, 4) 및 (n, 9)로 재구성 해보십시오. 매핑을 수행하십시오 (예 : 44). 다음 다시 고쳐. – hpaulj

관련 문제