상세 컨텐츠

본문 제목

[ NUMPY Exercise ] ( ing )

PYTHON/NUMPY

by mk coding 2024. 2. 28. 16:07

본문

1. Import the numpy package under the name np (★☆☆)

import numpy as np

2. Print the numpy version and the configuration (★☆☆)

print(np.__version__)
np.show_config()
더보기

Q. np.show_config() 함수는 무엇인가? 

np.show_config()은 numpy 라이브러리의 설정 정보를 출력하는 함수이다. 

numpy가 내부적으로 어떤 컴파일러와 라이브러리를 사용하고 있는지, BLAS / LAPACK 라이브러리가 어떤 것이 연결되어 있는지 등의 정보를 제공한다.

이 함수를 호출하면 numpy가 어떻게 빌드되었는지에 대한 세부 정보를 볼 수 있다. 이는 성능 최적화나 디버깅에 사용될 수 있다. 

예를 들어, numpy가 어떤 C 컴파일러를 사용하여 빌드되었는지, 어떤 수학 라이브러리를 사용하고 있는지 등을 확인할 수 있다. 이러한 정보는 numpy 연산 성능에 영향을 미칠 수 있기 때문에, numpy의 성능 문제를 진단하는 데 도움이 될 수 있다. 

3. Create a null vector of size 10 (★☆☆)

arr = np.zeros(10)
print(arr)
더보기

Q. null 벡터란? 

numpy에서 'null 벡터'라는 용어는 보통 모든 원소가 0인 벡터를 가리킨다. 

모든 원소가 0인 벡터는 np.zeros라는 함수를 통해 배열을 생성한다.

반면에 np.empty 함수가 만드는 배열은 'null 벡터'가 아니다. 

np.empty 함수는 초기화되지 않은 배열을 만들기 때문이다. 이 함수로 생성된 배열은 메모리 상태에 따라 임의의 값들을 가질 수 있다. 이 값들을 '쓰레기 값'이라고 부르며, 이전에 메모리에 저장되어 있던 무작위의 값들일 수 있다. 

 

Q. 배열 생성 및 초기화 하는 함수 list

1. zeros() : 모든 요소를 0으로 초기화

    - 주어진 형태와 타입을 갖는 0으로 채워진 배열을 반환

    - zeros(shape, dtype = float, order = 'C')

    - 지정된 shape의 배열을 생성하고, 모든 요소를 0으로 초기화 

 

2. ones() : 모든 요소를 1로 초기화

    - 주어진 형태와 타입을 갖는 1로 채워진 배열을 반환

    - np.ones(shape, dtype = None, order = 'C')

    - 지정된 shape의 배열을 생성하고, 모든 요소를 1로 초기화

 

3. full() : 모든 요소를 지정한 값으로 초기화

    - np.full(shape, fill_value, dtype = None, order = 'C')

    - 지정된 shape의 배열을 생성하고, 모든 요소를 지정한 'fill_value'로 초기화

 

4. eye() : identity matrix ( 단위 행렬(주 대각 성분이 모두 1이고 나머지 성분은 모두 0인 정사각 행렬) ) 생성

    - np.eye(N, M = None, k = 0, dtype = < class 'float' >)

    - (N, N) shape의 단위 행렬을 생성

 

5. tri() : 삼각 행렬 생성 

 

6. empty() : 초기화되지 않은 배열 생성

    - 초기화가 없어서 배열 생성비용 저렴하고 빠르다.

    - 초기화되지 않아서 기존 메모리 위치에 존재하는 값이 있음 

 

7. _like(): 지정된 배열과 shape가 같은 행렬 생성

    - np.zeros_like()

    - np.ones_like()

    - np.full_like()

    - np.empty_like()

4. How to find the memory size of any array (★☆☆)

arr = np.zeros((10, 20))
print("%d bytes" %(arr.nbytes))
print("%d bytes" %(arr.size * arr.itemsize))
더보기

Q. 배열 조회

def array_info(array):
 print(array)
 print("ndim:", array.ndim) # 배열 차원 수 또는 배열 축의 수 
 print("shape:", array.shape) # 배열 각 차원의 크기를 튜플 형태로 표현
 print("dtype:", array.dtype) # 배열 내 원소의 데이터 형
 print("size:", array.size) # 배열 원소의 개수 
 print("itemsize:", array.itemsize) # 배열 내 원소의 크기를 바이트 단위로 기술
 print("nbytes:", array.nbytes) # 배열 전체 바이트 (size*itemsize)
 print("strides:", array.strides) # 각 차원에서 한 요소에서 다른 요소로 넘어가는 데 필요한 바이트 수

5. How to get the documentation of the numpy add function from the command line? (★☆☆)

np.info(np.add)
help(np.add)

 

더보기

Q. numpy.info란? 

np.info(object = None, maxwidth = 76, output = None, toplevel = 'numpy')

    - 함수, 클래스 또는 모듈에 대한 도움말 정보를 가져온다. NumPy의 모든 API는 np.info 함수를 이용하여 도움말을 확인할 수 있다. 

    Parameters

        - object

          정보를 얻도가 하는 개체나 이름 입력. object가 numpy 객체인 경우 해당 문서 문자열이 제공된다. 문자열인 경우 사용 가능한              모듈에서 일치하는 개체를 검색한다. None인 경우 info 자체에 대한 정보가 반환된다.

        - maxwidth, optional 

          Printing width

        - 객체와 같은 출력 파일, 선택 사항

          출력이 기록되는 객체와 같은 파일이다. 기본값이 None이며, 이 경우 sys.stdout가 사용된다. 개체는 'w' 또는 'a'모드로 열려야              한다.

        - toplevel, optional

 

Q. Python help()란? 

help() : 함수, 메서드, 클래스 사용법에 대한 도움말을 아웃풋으로 출력하는 함수

    - 인터넷 검색을 하지 않더라도, 파이썬 IDE 내부에서 help() 함수를 사용하여 특정 모듈의 함수, 또는 객체(인스턴스)에 사용할 수          있는 메서드에 대한 도움말과 사용법을 조회할 수 있다.  

    - help()의 사용 방법

​        - 파이썬의 모듈A가 가진 함수a에 대한 도움말 출력

          help(모듈 A.함수 a) 

        - 파이썬의 인스턴스B의 클래스가 사용 가능한 메서드b의 도움말 출력

          help(인스턴스B.메서드b)

        - 파이썬의 모듈C가 가진 클래스c에 대한 도움말 출력

          help(모듈C.클래스c) 

6. Create a null vector of size 10 but the fifth value which is 1 (★☆☆)

arr = np.zeros(10)
arr[4] = 1
print(arr)

7. Create a vector with values ranging from 10 to 49 (★☆☆)

arr = np.arange(10, 50)
print(arr)
더보기

Q. 생성한 값으로 배열 생성

1. arange() : 정수 범위로 배열 생성

    - numpy.arange(start, stop, step, dtype = None)

    - start에서 stop미만까지 step간격으로 데이터 생성한 후 배열 생성

    - 범위 내에서 간격을 기준 균등 간격의 배열

    - 요소의 개수가 아닌 데이터의 간격을 기준으로 배열 생성

   

2. linspace() : 범위 내에서 균등 간격의 배열 생성

    - numpy.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None) 

    - start에서 stop의 범위에서 num개를 균일한 간격으로 데이터를 생성하고 배열을 만드는 함수

    - 요소 개수를 기준으로 균등 간격의 배열을 생성 

   

 

3. logspace() : 범위 내에서 균등 간격으로 로그 스케일로 배열 생성

    - numpy.logspace(start, stop, num = 50, endpoint = True, base = 10.0, dtype = None)

    - 로그 스케일의 linspace 함수

    - 로그 스케일로 지정된 범위에서 num 개수만큼 균등 간격으로 데이터를 생성한 후 배열 생성

    - 10의 승수로 표현 -> 로그스케일로 배열을 생성해야하기 때문 

8. Reverse a vector (first element becomes last) (★☆☆)

arr = arr[::-1]
print(arr)
더보기

Q. 배열의 슬라이싱 

    - 여러 개의 배열 요소를 참조할 때 사용

    -  axis별로 범위를 지정하여 실행한다. 

    -  from_index : to_index 형태로 지정한다. from_index는 범위의 시작 인덱스이며, to_index는 범위의 종료 인덱스이다. 요소 범위를        지정할 때 to_index는 결과에 포함되지 않는다. 

    -  from_index는 생략 가능하다. 생략할 경우 0을 지정한 것으로 간주된다. 

    -  to_index 역시 생략 가능하다. 이 경우 마지막 인덱스로 설정된다.

    -  따라서 ' : ' 형태로 지정된 범위는 전체 범위를 의미한다

    -  from_index와 to_index에 음수를 지정하면 반대방향을 의미한다. 

9. Create a 3x3 matrix with values ranging from 0 to 8 (★☆☆)

arr = np.arange(0, 9).reshape((3,-1))
print(arr)
더보기

Q. resize함수와 reshape함수 

    - 배열의 shape을 변경한다는 부분에서 유사하다

    - reshape 함수는 배열 요소 수를 변경하지 않기 때문에 reshape 전후 배열 요소 수는 같다.

    - 반면에 resize는 shape를 변경하는 과정에서 배열 요소 수를 줄이거나 늘린다. 

 1. np.resize

    - np.resize(a, new_shape)

    - np.ndarray.resize(new_shape, refcheck = True)

    - 배열의 shape와 크기를 변경한다.

    - 요소 수가 더 많은 경우 

        - 새 배열의 요소 수가 더 많은 경우

          원래 가지고 있는 배열의 데이터는 반복되지만, 오류는 발생하지 않는다.

        - 새 배열의 요소 수가 더 적은 경우 

          새 배열을 채우는 데 필요한 요소 수를 행 순서대로 가져온다. 

          resize()함수는 원래 배열과 동일한 메모리를 공유하지 않기 때문에 한 배열의 데이터 변경은 다른 배열에 매핑되지 않는다. 

2. np.reshape()

    - numpy.ndarray 객체의 shape를 변경한다.

    - 데이터의 개수와 형태의 크기는 같아야 한다.

    - reshape() 함수에서 변환된 배열은 원래 배열과 동일한 메모리를 공유하기에 한 배열에서 데이터를 변경하면 다른 배열의 데이터        도 수정된다.

    - ndarray가 아닌 다른 자료(list, tuple, range)를 바로 reshape하면 오류가 표시된다. 이런 경우에는 np.array() 함수를 이용하여              numpy.ndarray로 바꾸어 reshape할 수 있다.     

10. Find indices of non-zero elements from [1,2,0,0,4,0] (★☆☆)

arr = np.array([1, 2, 0, 0, 4, 0])
print(np.where(arr!=0))
print(np.nonzero(arr))
더보기

Q. np.where()

 - 조건 만족 인덱스 반환

 - 1차원일때는 해당 인덱스 번호에서 몇 번째 위치가 조건을 만족하는지 반환한다. 

 - 2차원 이상이면 axis를 기준으로 인덱스 번호를 가져온다. 

 - 두번째 인자에 True일 때 값, 세번째 인자에 False일 때 값을 써주면 broadcasting이 가능하다. 

np.where(a>10, a, 10) # a가 10보다 크면 그대로, 그렇지 않으면 10으로 설정

 

Q. np.nonzero() 

 - 0이 아닌 값들의 index를 반환해 주는 함수 

 - 2차원일때는 행과 열 각각의 인덱스를 반환하는 2개의 array로 구성된 튜플이 반환되는 것을 볼 수 있다.

       - 이 결과를 쉽게 보려면 주어진 것을 transpose 시켜주면 된다.  

11. Create a 3x3 identity matrix (★☆☆)

12. Create a 3x3x3 array with random values (★☆☆)

13. Create a 10x10 array with random values and find the minimum and maximum values (★☆☆)

14. Create a random vector of size 30 and find the mean value (★☆☆)

15. Create a 2d array with 1 on the border and 0 inside (★☆☆)

16. How to add a border (filled with 0's) around an existing array? (★☆☆)

17. What is the result of the following expression? (★☆☆)

18. Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆)

19. Create a 8x8 matrix and fill it with a checkerboard pattern (★☆☆)

20. Consider a (6,7,8) shape array, what is the index (x,y,z) of the 100th element? (★☆☆)

21. Create a checkerboard 8x8 matrix using the tile function (★☆☆)

22. Normalize a 5x5 random matrix (★☆☆)

23. Create a custom dtype that describes a color as four unsigned bytes (RGBA) (★☆☆)

24. Multiply a 5x3 matrix by a 3x2 matrix (real matrix product) (★☆☆)

25. Given a 1D array, negate all elements which are between 3 and 8, in place. (★☆☆)

26. What is the output of the following script? (★☆☆)

27. Consider an integer vector Z, which of these expressions are legal? (★☆☆)

28. What are the result of the following expressions? (★☆☆)

29. How to round away from zero a float array ? (★☆☆)

30. How to find common values between two arrays? (★☆☆)

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

32. Is the following expressions true? (★☆☆)

33. How to get the dates of yesterday, today and tomorrow? (★☆☆)

34. How to get all the dates corresponding to the month of July 2016? (★★☆)

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

36. Extract the integer part of a random array of positive numbers using 4 different methods (★★☆)

37. Create a 5x5 matrix with row values ranging from 0 to 4 (★★☆)

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

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

40. Create a random vector of size 10 and sort it (★★☆)

41. How to sum a small array faster than np.sum? (★★☆)

42. Consider two random array A and B, check if they are equal (★★☆)

43. Make an array immutable (read-only) (★★☆)

44. Consider a random 10x2 matrix representing cartesian coordinates, convert them to polar coordinates (★★☆)

45. Create random vector of size 10 and replace the maximum value by 0 (★★☆)

46. Create a structured array with x and y coordinates covering the [0,1]x[0,1] area (★★☆)

47. Given two arrays, X and Y, construct the Cauchy matrix C (Cij =1/(xi - yj)) (★★☆)

48. Print the minimum and maximum representable value for each numpy scalar type (★★☆)

49. How to print all the values of an array? (★★☆)

50. How to find the closest value (to a given scalar) in a vector? (★★☆)

51. Create a structured array representing a position (x,y) and a color (r,g,b) (★★☆)

52. Consider a random vector with shape (100,2) representing coordinates, find point by point distances (★★☆)

53. How to convert a float (32 bits) array into an integer (32 bits) in place?

54. How to read the following file? (★★☆)

1, 2, 3, 4, 5
6,  ,  , 7, 8
 ,  , 9,10,11
 

55. What is the equivalent of enumerate for numpy arrays? (★★☆)

56. Generate a generic 2D Gaussian-like array (★★☆)

57. How to randomly place p elements in a 2D array? (★★☆)

58. Subtract the mean of each row of a matrix (★★☆)

59. How to sort an array by the nth column? (★★☆)

60. How to tell if a given 2D array has null columns? (★★☆)

61. Find the nearest value from a given value in an array (★★☆)

62. Considering two arrays with shape (1,3) and (3,1), how to compute their sum using an iterator? (★★☆)

63. Create an array class that has a name attribute (★★☆)

64. Consider a given vector, how to add 1 to each element indexed by a second vector (be careful with repeated indices)? (★★★)

65. How to accumulate elements of a vector (X) to an array (F) based on an index list (I)? (★★★)

66. Considering a (w,h,3) image of (dtype=ubyte), compute the number of unique colors (★★☆)
67. Considering a four dimensions array, how to get sum over the last two axis at once? (★★★)

68. Considering a one-dimensional vector D, how to compute means of subsets of D using a vector S of same size describing subset indices? (★★★)

69. How to get the diagonal of a dot product? (★★★)
70. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3 consecutive zeros interleaved between each value? (★★★)
71. Consider an array of dimension (5,5,3), how to mulitply it by an array with dimensions (5,5)? (★★★)
72. How to swap two rows of an array? (★★★)

73. Consider a set of 10 triplets describing 10 triangles (with shared vertices), find the set of unique line segments composing all the triangles (★★★)

74. Given a sorted array C that corresponds to a bincount, how to produce an array A such that np.bincount(A) == C? (★★★)

75. How to compute averages using a sliding window over an array? (★★★)

76. Consider a one-dimensional array Z, build a two-dimensional array whose first row is (Z[0],Z[1],Z[2]) and each subsequent row is shifted by 1 (last row should be (Z[-3],Z[-2],Z[-1]) (★★★)

77. How to negate a boolean, or to change the sign of a float inplace? (★★★)

78. Consider 2 sets of points P0,P1 describing lines (2d) and a point p, how to compute distance from p to each line i (P0[i],P1[i])? (★★★)
 

79. Consider 2 sets of points P0,P1 describing lines (2d) and a set of points P, how to compute distance from each point j (P[j]) to each line i (P0[i],P1[i])? (★★★)

80. Consider an arbitrary array, write a function that extract a subpart with a fixed shape and centered on a given element (pad with a fill value when necessary) (★★★)

81. Consider an array Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14], how to generate an array R = [[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]? (★★★)

 

82. Compute a matrix rank (★★★)

83. How to find the most frequent value in an array?

84. Extract all the contiguous 3x3 blocks from a random 10x10 matrix (★★★)

85. Create a 2D array subclass such that Z[i,j] == Z[j,i] (★★★)

86. Consider a set of p matrices with shape (n,n) and a set of p vectors with shape (n,1). How to compute the sum of of the p matrix products at once? (result has shape (n,1)) (★★★)

87. Consider a 16x16 array, how to get the block-sum (block size is 4x4)? (★★★)

88. How to implement the Game of Life using numpy arrays? (★★★)

89. How to get the n largest values of an array (★★★)

90. Given an arbitrary number of vectors, build the cartesian product (every combinations of every item) (★★★)

91. How to create a record array from a regular array? (★★★)

92. Consider a large vector Z, compute Z to the power of 3 using 3 different methods (★★★)

93. Consider two arrays A and B of shape (8,3) and (2,2). How to find rows of A that contain elements of each row of B regardless of the order of the elements in B? (★★★)

94. Considering a 10x3 matrix, extract rows with unequal values (e.g. [2,2,3]) (★★★)

95. Convert a vector of ints into a matrix binary representation (★★★)

96. Given a two dimensional array, how to extract unique rows? (★★★)

97. Considering 2 vectors A & B, write the einsum equivalent of inner, outer, sum, and mul function (★★★)

98. Considering a path described by two vectors (X,Y), how to sample it using equidistant samples (★★★)?

99. Given an integer n and a 2D array X, select from X the rows which can be interpreted as draws from a multinomial distribution with n degrees, i.e., the rows which only contain integers and which sum to n. (★★★)

100. Compute bootstrapped 95% confidence intervals for the mean of a 1D array X (i.e., resample the elements of an array with replacement N times, compute the mean of each sample, and then compute percentiles over the means). (★★★)

관련글 더보기