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
(iterable, dtype, count=-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
반응형