함수 결과값을 넘파이 변환

조회수 518회
import numpy as np

u = np.random.randint(2,size=(1,100))
print(u)

print(np.size(u,1))

def turbo_enc(u):
    K = np.size(u,1)
    print(K)
    enc = np.zeros_like(u)
    enc = u
    return enc
enc1 = turbo_enc(u)
print(enc1)

def add(x,y,z):
    if((x+y+z) % 2 == 0):
        return 0
    else:
        return 1

a1 = np.array((0))
a2 = np.array((0))
def loop(u):
    global a1
    global a2
    for i in range(99):
        if(i==0):
            print(add(enc1[0][i],a1,a2),end ='')
        elif(i == 1):
            a1 = enc1[0][0]
            print(add(enc1[0][i],a1,a2),end = '')
        else:
            a1 = enc1[0][i-1]
            a2 = enc1[0][i-2]
            print(add(enc1[0][i],a1,a2),end='')
    return print(add(enc1[0][i],a1,a2),end='')

loop(u).reshape(10,10)

'add 함수' = 더한값이 짝수이면 0 반환, 홀수이면 1반환

여기 까지가 현재까지 작성한 코드 입니다. 대학 과제인 'Turbo code with interleaver'를 파이썬으로 작성하고 있습니다. 전체적인 과정은 다음과 같습니다.

  1. 입력하는 비트 100개(0과 1로 구성된 랜덤한 비트)
  2. 레지스터 메모리 m1,과 m2이 초기값은 0,0으로 설정되어 있다.
  3. 첫번째 어떠한 비트 'n'이 입력이 되었을때 add함수로 0또는 1의 값을 추출합니다. (이것을 A라고 하겠습니다.)
  4. A의 값과 m1,m2를 다시 add함수로 최종 출력합니다.
  5. 여기서 A의 100개의 값을 넘파이 배열로 만드는것을 희망하는데, reshape을 해본 결과
  6. 'NoneType' object has no attribute 'reshape' 라는 에러 메세지를 전달 받았습니다.
  7. 이렇게 함수를 통해 결과값을 얻는후에 넘파이 배열로 변환하는 방법에 대해서 알고싶습니다.

1 답변

  • 의도를 정확하게 모르겠는데요. 일단 에러가 나온 이유를 설명해 드립니다.

    def loop(u):
      #...
      return print(add(...))
    

    이렇게 하면, loop함수의 반환값은 print 함수의 반환값을 그대로 전달해 주는 것이 됩니다. print 함수의 반환값은 None 이고요.

    그래서 loop(u)None 이 되고, loop(u).reshape(10, 10)None.reshape(10, 10) 과 같게 되는 거죠. 그런데, Nonereshape이라는 메소드가 없기 때문에, 'NoneType' object has no attribute 'reshape' ( NoneType 오브젝트는 reshape 이란 어트리뷰트가 없다) 란 에러가 발생한 겁니다.

    질문자에게 좀 어려운 설명일 것 같은데, 10번만 읽어보세요.

    • 말무리를 정리 못하고 올린것 같습니다. 그럼에도 답변 달아주셔서 감사드립니다! 차분히 이해해보겠습니다 이주현 2022.5.23 13:36
    • 말무리를 정리 못하고 올린것 같습니다. 그럼에도 답변 달아주셔서 감사드립니다! 차분히 이해해보겠습니다 이주현 2022.5.23 13:36

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)