2013-12-20 1 views
2

은이 같은 동적 배열의 값에 따라 NumPy와 함께 2-D 행렬을 만들려고 :numpy 행렬을 배열 값에서 동적으로 채 웁니까?

In [113]: A = np.zeros((5,5),dtype=bool) 
In [114]: A 
Out[114]: array([[False, False, False, False, False], 
    [False, False, False, False, False], 
    [False, False, False, False, False], 
    [False, False, False, False, False], 
    [False, False, False, False, False]], dtype=bool) 

In [116]: B = np.array([0,1,3,0,2]) 

In [117]: B 
Out[117]: array([0, 1, 3, 0, 2]) 

해주기, I는 상기 제를 할당 B의 값을 사용하려는 각 행의 n 값은 A에서 참으로. 이것은 A 및 B의 경우, 올바른 출력 될 것이다 :

In [118]: A 
Out[118]: array([[False, False, False, False, False], 
    [ True, False, False, False, False], 
    [ True, True, True, False, False], 
    [False, False, False, False, False], 
    [ True, True, False, False, False]], dtype=bool) 

B의 길이는의 행의 개수와 동일 항상되고, B의 값은 항상의 수보다 적거나 동일 할 것이다 A의 열과 B의 값은 끊임없이 변하기 때문에 나는 이것을 비행 중에 만들어야합니다.

나는 이것에 numpy의 단순한 (-ish) 해결책이 있다고 확신하지만, 지난 시간을 반복, 타일 및 내가 생각할 수있는 다른 변형에 대해 머리를 치는 데 보냈습니다. 내가 뇌진탕을 내기 전에 누군가가 나를 도울 수 있습니까? :)

편집 :이 작업을 많이해야하므로 속도가 문제가됩니다. 내가 지금 가지고 올 수있는 유일한 버전은 같은 것입니다 :

np.vstack([ [True]*x + [False]*(500-x) for x in B ]) 

하지만 난이 (내가 그것을 비교하는 것도이 있다면 내가 시간이 것)에 의한 루프의 느린 될 것으로 기대합니다.

답변

3
에 대해 어떻게

: (. 내가 있던 축에있는 혼동지고 있었기 때문에 내가 (5,5)에서 모양을 변경하고, 내가 올바른 하나를 사용하고 있는지 확인하고 싶었)

>>> A = np.zeros((5, 7),dtype=bool) 
>>> B = np.array([0,1,3,0,2]) 
>>> (np.arange(len(A[0])) < B[:,None]) 
array([[False, False, False, False, False, False, False], 
     [ True, False, False, False, False, False, False], 
     [ True, True, True, False, False, False, False], 
     [False, False, False, False, False, False, False], 
     [ True, True, False, False, False, False, False]], dtype=bool) 

이 -

+1

달콤한 크리스마스 [(np.arange(len(A[0]))[:,None] < B).T에서 단순화. 우리가 B을 확장하는 경우와하지 A, 트랜스에 대한 필요가 없습니다, 그것은 좋은! 그리고 너무 빨리 ... 감사합니다! – Winawer

+0

실제로'A'를 빌드 할 필요는 없다는 것을 유의하십시오. 필요한 것은'len (A [0])'과'B'입니다. – DSM

관련 문제