2017-05-06 4 views
1

배열에서 부울을 테스트하고 해답을 기반으로 매트릭스에 요소 단위 연산을 적용해야합니다. 나는 행에 대한 부울 응답을 얻는 것 같고 개별 요소 자체에 대해서는 부울 대답을 얻지 못하는 것 같습니다. 어떻게 테스트하고 각 개별 요소에 대한 해답을 얻습니까?elementwise 부울 매트릭스에서의 테스트

가 나는 확률

probs = np.array([[0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.7, 0.2, 0.6, 0.1, 0.0]]) 

의 매트릭스 테스트 어레이

tst = ([False, False, True, True, False], 
     [True, False, True, False, False], 
     ) 
t = np.asarray(tst).astype('bool') 

매트릭스 난 답을 출력하는 작성한 코드 세그먼트가 있지만, 분명히 전체 행 테스트 모든 것이 거짓이기 때문에.

for row in tst: 
    mat = [] 
    for row1 in probs: 
     temp = [] 
     if row == True: 
      temp.append(row1) 
     else: temp.append(row1-1) 
     mat.append(temp) 

mat 
Out[42]: 
[[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.3, -0.8, -0.4, -0.9, -1. ])]] 

난 TST 번째로 배열

[[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.3, -0.8, 0.6, 0.1, -1] 

될 새 기질을 필요로한다. 도움을 주셔서 대단히 감사합니다!

답변

0

당신은 테스트 True하고 있다면있는 그대로의 값을 유지해야 빼기 1, 그렇지 않으면

부울과 목록을 비교하고 있기 때문에 귀하의 루프가 작동하지 않습니다. 그 후 전체 행에서 1을 뺀 것입니다 (모든 원소에 1을 빼기).

내 해결책 : 값 행에 부울 행을 빼고 True와 False를 반올림합니다 (참이면 참

[[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.3 -0.8 0.6 0.1 -1. ]] 
[[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.7 -0.8 0.6 -0.9 -1. ]] 

(내가 아닌 해요 : 빼기) : 당신이 당신의 행렬이 진실 테이블)을 결합하고 있기 때문에 각각의 반복에 대한

for row in tst: 
    mat = [] 
    for row1 in probs: 
     mat.append(row1-[not v for v in row]) 

    print(np.asarray(mat)) 

인쇄는() (당신이이 개 결과를 가지고 있습니다 numpy 전문가가 아쉽습니다.이 서투른 사람은 죄송합니다. 의견 환영)

+0

덕분에,이 위대하다! –

0

여기에 루프가 필요하지 않습니다. 배열과 해당 마스크 배열이 있습니다.

probs[np.invert(tst)]-=1. 

마스크는 실제 값을 돌려 줄 것입니다. false 값을 사용하지 않아서 tst 배열을 뒤집을 수 있습니다.

# This would be a longer version, if you are not familiar with the synthax above 
probs[np.invert(tst)]=probs[np.invert(tst)]-1. 

새 NumPy와 배열을 만들려면

는 예를 들어 이런 식으로 작동합니다 (당신은 당신의 코드에서 NumPy와-배열의 목록을 생성). 당신은 예를 들어 목록 및 NumPy와-배열과 방법을 처리하는 방법의 차이를 알고있는 경우

# copy the numpy array 
mat=np.copy(probs) 
mat[np.invert(tst)]=probs[np.invert(tst)]-1 

내가 먼저보기 초보자 튜토리얼을 살펴보고 당신을 추천, 프로그래밍은 훨씬 쉬워 질 것입니다.

https://www.scipy.org/scipylib/faq.html#what-advantages-do-numpy-arrays-offer-over-nested-python-lists https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

또는 간단한 설명

Python List vs. Array - when to use?

+0

=) 예, 정말로해야합니다. 불행히도 2 일 안에 만기가됩니다. 나는 깊은 끝에서 파이썬 exp가없고, 거의 prog exp가 없다. 그리고 예! 새로운 배열을 만드는 것은 내가 필요로하는 것이었다. 감사. –