[Numpy] Numpy 연습문제 31~40
🐍Python/Numpy

[Numpy] Numpy 연습문제 31~40

728x90
반응형

31. How to ignore all numpy warnings (not recommended)?

-> # Suicide mode on
defaults = np.seterr(all="ignore")
Z = np.ones(1) / 0
# Back to sanity
_ = np.seterr(**defaults)

An equivalent way, with a context manager:

with np.errstate(divide='ignore'):
    Z = np.ones(1) / 0

해설 : 

처음에 all을 ignore로 설정하여 오류발생시 아무 action도 취하지 않게 했다.
그리고 **default로 원래대로 돌려놓는다. 
그리고 경고를 표시하지 않으려고 numpy.errstate(divide = ‘ignore’)을 사용한다 

32. Is the following expressions true?

np.sqrt(-1) == np.emath.sqrt(-1)

A : False

해설 : nan = 1j로 다르다. emath를 통해 변수를 더 수학적으로 표현할 수 있게 해준다.

33. How to get the dates of yesterday, today and tomorrow?

-> yesterday = np.datetime64('today','D') - np.timedelta64(1,'D')
    today = np.datetime64('today','D')
    tomorrow = np.datetime64('today','D') + np.timedelta64(1,'D')

A : 2019-01-04 2019-01-05 2019-01-06

해설 : ’today’로 오늘 날짜를 지정하고 ‘D’로 일이라고 정해준다.
np.timedelta64(A,’D’)면 A days / ‘Y’이면 A year로 입력이 된다.

34. How to get all the dates corresponding to the month of July 2016? 

-> Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)

A : ['2016-07-01' '2016-07-02' '2016-07-03' '2016-07-04' '2016-07-05'
'2016-07-06' '2016-07-07' '2016-07-08' '2016-07-09' '2016-07-10'
'2016-07-11' '2016-07-12' '2016-07-13' '2016-07-14' '2016-07-15'
'2016-07-16' '2016-07-17' '2016-07-18' '2016-07-19' '2016-07-20'
'2016-07-21' '2016-07-22' '2016-07-23' '2016-07-24' '2016-07-25'
'2016-07-26' '2016-07-27' '2016-07-28' '2016-07-29' '2016-07-30'
'2016-07-31']

해설 : arange는 numpy버전의 range이다. 특정한 규칙에 따라 증가하는 수열을 만든다. 7월과 8월 사이를 dtype=‘datetime64[D]'로 나누어 일별로 분류했다.   

35. How to compute ((A+B)*(-A/2)) in place (without copy)?

-> A = np.ones(3)*1
    B = np.ones(3)*2
    C = np.ones(3)*3
    np.add(A,B,out=B)
    np.divide(A,2,out=A)
    np.negative(A,out=A)
    np.multiply(A,B,out=A)

A : array([-1.5, -1.5, -1.5])

해설 : np.add로 A.B를 더하여 B에 그 값을 속하게 한다. A를 2로 나누고 A에 할당하고 A에 -를 붙여 A에 할당하고 A,B를 곱한 것을 A에 할당한다. 

36. Extract the integer part of a random array using 5 different methods

-> Z = np.random.uniform(0,10,10)

    print(Z - Z%1)
    print(np.floor(Z))
    print(np.ceil(Z))
    print(Z.astype(int))
    print(np.trunc(Z))

A : 다 정수(integer)로 나옴. 
첫 번째는, Z에서 Z를1로 나눈 나머지를 빼서 정수부분을 구했다
두 번째는, np.floor를 이용하여 내림하였다.
세 번째는, np.ceil을 이용하여 올림하였다.
네 번째는, astype을 이용하여 integer로 변환하였다.
다섯 번째는, np.trunc를 이용한 것인데 이는 input의 소숫자리를 자른 후의 value를 나타낸다. 

37. Create a 5x5 matrix with row values ranging from 0 to 4

-> Z = np.zeros((5,5))
    Z += np.arange(5)
    Z

A : array([[0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.]])

해설 : 먼저 0으로 채워진 5x5행렬을 만들고 각각에 np.arange를 통해 0,1,2,3,4를 더했다.

38. Consider a generator function that generates 10 integers and use it to build an array 

-> def generator():
        for i in range(10):
            yield i
    Z = np.fromiter(generator(),dtype="float",count=-1)
    Z

A : array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

해설 : 0부터 9까지 출력하는 generator라는 function을 만들었다. Generator는  대용량 자료 처리에 적합하다. 반복처리에 매우 적합하고 편하다. generator에서는 return이 아닌 yield를 사용한다. return을 할 경우 처음 값만 도출되지만 yield는 값을 내보낼 수도 넣어줄 수도 있다. ( 한 번에 끝나지 않고 여러번에 걸쳐 입출력을 받을 수 있다. )
그리고 np.fromiter를 통해 표현가능한 객체로부터 새로운 1차원 array를 만든다.
count = -1 로 설정함으로써 전부 다 불러온다. 
numpy.fromiter(iterabledtypecount=-1)


39. Create a vector of size 10 with values ranging from 0 to 1, both excluded

-> Z = np.linspace(0,1,11,endpoint=False)[1:]
    Z

A : array([0.09090909, 0.18181818, 0.27272727, 0.36363636, 0.45454545,
       0.54545455, 0.63636364, 0.72727273, 0.81818182, 0.90909091])

해설 : np.linspace(시작(포함),끝(포함),갯수)를 만든다. 11개를 먼저 만들고 endpoint=False로 마지막 vector를 지정한 숫자가 아닌 숫자로 변환한다.그리고 [1:]로 지정하여 1번째 vector를 제외한다.

40. Create a random vector of size 10 and sort it

-> Z = np.random.random(10)
    Z.sort()
    print(Z)

A : [0.00090931 0.03810094 0.06019686 0.07453399 0.21269496 0.29064064
0.49228257 0.54776429 0.6079757  0.79361385]

해설 : x.sort() 는 배열 자체를 정렬시키는 역할을 한다. 크기순서에 맞게 정렬한 모습을 볼 수 있다. 



728x90
반응형