728x90
반응형
41. How to sum a small array faster than np.sum?
-> A = np.arange(10)
np.add.reduce(A)
A : 45
42. Consider two random array A and B, check if they are equal
-> A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
print(np.allclose(A,B))
print(np.array_equal(A,B))
A : False
False
해설 : np.random.randint(~부터,~까지,갯수)로 random한 수를 만든다. 그리고 np.allclose / np.array_equal로 이 둘이 같은지 확인한다.
43. Make an array immutable (read-only)
-> Z = np.zeros(10)
Z.flags.writeable = False
Z[0]= 1
A : ValueError: assignment destination is read-only
해설 : Z.flags.writeable = False로 설정함으로써 변수를 변경하는 것을 막았다.
44. Consider a random 10x2 matrix representing cartesian coordinates, convert them to polar coordinates
-> Z = np.random.random((10,2))
X,Y = Z[:,0], Z[:,1]
R = np.sqrt(X**2+Y**2)
P = np.arctan2(Y,X)
print(R)
print(P)
A : [1.01434065 0.99973581 0.87746031 0.83094067 0.87575542 0.63995035
1.05394707 0.61888326 0.80955953 1.03479779]
[0.37580005 1.06439612 0.64049511 0.20915833 1.38573605 0.97596043
1.09371614 0.21938327 1.44770291 1.24857978]
해설 : 먼저 X, Y에 각각의 0열, 1열을 할당한다.
그리고 Cartesian coordinates √X^2+Y^2을 실행한다.
그리고 극좌표계(polar)를 나타내기 위해 arctan2를 사용한다.
45. Create random vector of size 10 and replace the maximum value by 0
-> Z = np.random.random(10)
Z[Z.argmax()] = 0
print(Z)
A: [0.64485038 0.22565932 0.51117196 0.29435492 0.37009494 0.38939236
0.2915144 0.35736192 0.57608598 0.38200352]
[0. 0.22565932 0.51117196 0.29435492 0.37009494 0.38939236
0.2915144 0.35736192 0.57608598 0.38200352]
0.64485 -> 0으로 바뀜
해설 : np.random.random(10)으로 난수 10개를 생성하고 Z.argmax()를 통해 max값의 위치를 먼저 찾았다. 그리고 그 값으로 Z를 indexing하여 0을 바꾸었다.
46. Create a structured array with x and y coordinates covering the [0,1]x[0,1] area
-> Z = np.zeros((5,5),[('x',float),('y',float)])
Z['x'],Z['y'] = np.meshgrid(np.linspace(0,1,5),np.linspace(0,1,5))
print(Z)
A : [[(0. , 0. ) (0.25, 0. ) (0.5 , 0. ) (0.75, 0. ) (1. , 0. )]
[(0. , 0.25) (0.25, 0.25) (0.5 , 0.25) (0.75, 0.25) (1. , 0.25)]
[(0. , 0.5 ) (0.25, 0.5 ) (0.5 , 0.5 ) (0.75, 0.5 ) (1. , 0.5 )]
[(0. , 0.75) (0.25, 0.75) (0.5 , 0.75) (0.75, 0.75) (1. , 0.75)]
[(0. , 1. ) (0.25, 1. ) (0.5 , 1. ) (0.75, 1. ) (1. , 1. )]]
해설 : 변수가 2개인 2차원 함수의 그래프를 그리거나 표를 작성하려면 2차원 영역에 대한 (x,y) 좌표값 쌍 즉, 그리드 포인트(grid point)를 생성하여 각 좌표에 대한 함수 값을 계산해야 한다. 예를 들어 x, y 라는 두 변수를 가진 함수에서 x가 0부터 2까지, y가 0부터 4까지의 사각형 영역에서 변화하는 과정을 보고 싶다면 이 사각형 영역 안의 다음과 같은 그리드 포인트들에 대해 함수를 계산해야 한다.
Meshgrid를 통해 사각형 영역을 구성하는 가로축의 점들과 세로축의 점을 나타내는 두 벡터를 인수로 받아서 이 사각형 영역을 이루는 조합을 출력한다. 결과는 그리드 포인트의 x 값만을 표시하는 행렬과 y 값만을 표시하는 행렬 두 개로 분리하여 출력한다.
47. Given two arrays, X and Y, construct the Cauchy matrix C (Cij =1/(xi - yj))
-> X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X,Y)
print(np.linalg.det(C))
A : 3638.1636371179666
해설 : np.subtract(A,B) 는 A-B를 의미한다.
np.subtract.outer(A,B)를 하면
[[A1-B1 A1-B2 A1-B3]
[ A2-B1 A2-B2 A2-B3]
[ A3-B1 A3-B2 A3-B3]]
으로 각각의 i,j에 해당하는 성분을 추출하여 뺀다.
Linalg는 linearAlgebra를 말한다. det는 matrix의 determinant of an array를 계산한다.
48. Print the minimum and maximum representable value for each numpy scalar type
-> for dtype in [np.int8,np.int32,np.int64]:
print(np.iinfo(dtype).min)
print(np.iinfo(dtype).max)
for dtype in [np.float32,np.float64]:
print(np.finfo(dtype).min)
print(np.finfo(dtype).max)
print(np.finfo(dtype).eps)
A : -128
127
-2147483648
2147483647
-9223372036854775808
9223372036854775807
-3.4028235e+38
3.4028235e+38
1.1920929e-07
-1.7976931348623157e+308
1.7976931348623157e+308
2.220446049250313e-16
해설 : iinfo()는 int에 대한 정보를 / finfo()는 float에 대한 정보를 준다. Eps는 표현가능한 가장 작은 값을 돌려준다.
49. How to print all the values of an array?
-> np.set_printoptions(threshold=np.nan)
Z = np.zeros((16,16))
Z
A : set_printoptions로 print options를 설정할 수 있다. 굉장히 많은 option을 조정할 수 있다 .
이를 참고하면 된다.
Threshold는 전체가 아닌 요약을 하는 배열 요소의 총 수를 나타낸다
50. How to find the closest value (to a given scalar) in a vector?
->Z = np.random.randint(0,10,10)
print(Z)
Z[Z.argmin()]
A : [6 8 3 9 3 5 7 4 1 9]
8
( 8 번째가 가장 작다 (0부터 셈))
해설 : argmin()은 배열속 가장 작은 값의 index를 알려준다. ( <-> argmax )
728x90
반응형