numpy-100 실습

경하·2024년 6월 25일
0

코딩 실습

목록 보기
2/3

출처: https://github.com/rougier/numpy-100

  1. np라는 이름으로 numpy 패키지 임포트 (★☆☆)
import numpy as np

  1. numpy 버전(version), 설정(configuration) 출력 (★☆☆)
print(np.__version__)
print(np.show_config())

  1. 크기가 10인 null 벡터 출력 (★☆☆)
Z = np.zeros(10)
print(Z)

  1. Z에 np.zeros((10, 10))가 할당되어 있을 때, numpy를 이용해 해당 배열의 메모리 크기를 구하는 방법 (★☆☆)
Z = np.zeros((10, 10))
print("%d bytes" % (Z.size * Z.itemsize))

  1. 명령 프롬프트에서 numpy의 add 기능에 대한 문서를 출력하는 방법 (★☆☆)
%run `python -c "import numpy; numpy.info(numpy.add)"

  1. 5번째 값은 1인 크기 10의 null 벡터 출력하는 방법 (★☆☆)
Z = np.zeros(10)
Z[4] = 1
print(Z)

  1. 10부터 49까지의 값을 갖는 벡터 만드는 방법 (★☆☆)
Z = np.arange(10, 50)
print(Z)

  1. 0부터 49까지의 값을 갖는 벡터를 만들고 값이 큰 순서대로 나열되게끔 하는 방법 (★☆☆)
Z = np.arange(50)
Z = Z[::-1]
print(Z)

  1. 0부터 8까지의 값을 갖는 3X3 행렬 만드는 방법 (★☆☆)
Z = np.arange(9).reshape(3, 3)
print(Z)

  1. 0이 아닌 정수의 인덱스 반환하는 방법 (★☆☆)
np = np.nonzero([0, 2, 4, 2, 0, 2])
print(np)

  1. 3×3 배열 만드는 방법 (★☆☆)
Z = np.eye(3)
print(Z)

  1. 랜덤값을 갖는 3×3×3 배열 만드는 방법 (★☆☆)
Z = np.random.random((3, 3, 3))
print(Z)

  1. 랜덤값을 갖는 10×10 배열을 만들고 최대값과 최소값 찾는 방법 (★☆☆)
Z = np.random.random((10, 10))
Zmin, Zmax = Z.min(), Z.max()
prinr(Zmin, Zmax)

  1. 랜덤값을 갖는 크기 30의 벡터를 만들고 평균값을 구하는 방붑 (★☆☆)
Z = np.random.random(30)
m = Z.mean()
print(m)

  1. 10×10인 2차원 행렬을 만들고 가장자리는 1, 나머지는 0이 되게 하는 방법 (★☆☆)
Z = np.ones((10, 10))
Z[1:-1, 1:-1] = 0
print(Z)

  1. 1이라는 값으로만 채워진 5×5 배열에서 가장자리를 0으로 바꾸는 방법 (★☆☆)
Z = np.ones((5, 5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)
# fancy하게 인덱스 사용하기
Z[:, [0:-1]] = 0
Z[[0:-1], :] = 0
prinr(Z)

  1. 다음 코드의 결과 예상해보기 (★☆☆)
print(0 * np.nan)
print(np.nan == np.nana)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(np.nan in set([np.nan]))
print(0.3 == 3 * 0.1)

  1. 값 1, 2, 3, 4가 대각선을 이루는 5×5 배열 만드는 방법 (★☆☆)
Z = np.diag(1+np.arrange(4), k=-1)
print(Z)

  1. 0과 1로 격자무늬를 이루는 8x8 행렬을 만드는 방법 (★☆☆)
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
print(Z)

  1. (6,7,8) 배열이 있다고 가정할 때, 100번째 요소의 인덱스 (x, y, z)는 무엇인가? (★☆☆)
# 배열의 크기
shape = (6, 7, 8)

# 100번째 원소는 0-based index로 99번째 원소
element_index = 99

# NumPy의 unravel_index 함수를 사용해 1차원 인덱스를 3차원 인덱스로 변환
index_3d = np.unravel_index(element_index, shape)

print(index_3d)

# 또는 print(np.unravel_index(99,(6,7,8))로 한 줄 구현 가능

  1. tile 기능을 사용해 0과 1로 격자무늬를 이루는 8x8 행렬을 만드는 방법 (★☆☆)
Z = np.tile(np.array([[0,1],[1,0]]), (4,4))
print(Z)

  1. 랜덤 값을 갖는 5×5 행렬을 정규화하는 방법
Z = np.random.random((5,5))
Z = (Z - np.mean(Z) / (np.std(Z))
print(Z)

  1. 4개의 미지정 바이트로 색상을 나타내는 custom dtype 만드는 방법
color = np.dtype([("r", np.ubyte), ("g", np.ubyte), ("b", np.ubyte), ("a", np.ubyte)]

  1. 5x3 행렬과 3×2 행렬의 곱 (real matrix product)
Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)
# 파이썬 3.5 이상에서 가능한 다른 해결책

Z = np.ones((5,3)) @ np.ones((3,2))
print(Z)

  1. 함수를 이용해 0부터 10까지의 값을 갖는 1차원 배열을 만들고 3과 8 사이의 값들은 음의 정수로 만들기 (이때 값들이 자리한 순서는 이전과 그대로)
Z = np.arrange(11)
Z[(3<Z)&(8<Z)] *= -1
print(Z)

  1. 다음 코드의 결과를 예측해보자.
print(sum(range(5), -1)
import numpy as *
print(sum(range(5), -1)

  1. 정수형 벡터 Z가 있다. 아래 표현 중 어느 것이 옳은지 판단해보자.
Z**Z
2 << Z >> 2
Z <- Z
ij*Z
Z/1/1
Z<Z>Z

  1. 다음 코드의 결과를 예측해보자.
print(np.array(0) / np.array(0))
print(np.array(0) // np.array(0))
print(np.array([np.nan]).astype(int).astype(float))


  1. 2개의 배열에서 일반적인 값을 구하는 방법
Z1 = random.randit(0, 10, 10)
Z2 = random.randint(0, 10, 10)
print(np.intersectid(Z1, Z2))

0개의 댓글