[Numpy exercise 100] 61번 ~ 70번 문제풀이

2021. 12. 27. 12:19·Minding's Programming/Numpy & Pandas
728x90
반응형

[Numpy exercise 100] 1번 ~ 30번 문제풀이

 

[Numpy exercise 100] 1번 ~ 30번 문제풀이

Data Scientist로의 역량 강화와 데이터 분석 분야 면접 준비를 위해 numpy를 다시 한번 복습하고자 Numpy excersise 100문제를 풀기로 마음을 먹었다. https://github.com/rougier/numpy-100 GitHub - rougier/nu..

minding-deep-learning.tistory.com

[Numpy exercise 100] 31번 ~ 60번 문제풀이

 

[Numpy exercise 100] 31번 ~ 60번 문제풀이

[Numpy exercise-100] 1번 ~ 30번 문제풀이 [Numpy exercise-100] 1번 ~ 30번 문제풀이 Data Scientist로의 역량 강화와 데이터 분석 분야 면접 준비를 위해 numpy를 다시 한번 복습하고자 Numpy excersise 100문..

minding-deep-learning.tistory.com

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

 

GitHub - rougier/numpy-100: 100 numpy exercises (with solutions)

100 numpy exercises (with solutions). Contribute to rougier/numpy-100 development by creating an account on GitHub.

github.com

 

60번부터는 별 2개 ~ 별 3개의 비교적 고난이도 문제가 나오기 때문에 이해하는 데 시간이 걸릴 것이라고 생각되어

10문제씩 풀며 이해하고 넘어갈 예정이다.

 


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

  • 배열의 지정된 값에서 가장 가까운 값 찾기
  • .flat()으로 array를 vector형태로 펴준 뒤 벡터의 방법과 같이 최소값 구해줌
Z = np.random.uniform(0,1,10)
z = 0.5
print(Z)
m = Z.flat[np.abs(Z-z).argmin()]
print(m)

>>>
[0.22690611 0.73244938 0.42902479 0.19474847 0.11260596 0.62687306
 0.70982974 0.76366036 0.15354412 0.18160317]
0.4290247857509055

 

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

  • 모양 (1,3)과 (3,1)의 두 배열을 고려할 때 iterator를 사용하여 합계를 계산하는 방법은 무엇입니까?
  • np.nditer 공식문서 : https://numpy.org/doc/stable/reference/generated/numpy.nditer.html
  • np.nditer는 요소 하나하나마다 접근하여 설정값에 따른 결과를 알려주는 함수 (배열 반복)
A = np.arange(3).reshape(1,3)
B = np.arange(3).reshape(3,1)
print(A, B)
it = np.nditer([A,B,None])
for x,y,z in it: z[...] = x+y
print(it.operands[2])

>>>
[[0 1 2]] [[0]
 [1]
 [2]]
[[0 1 2]
 [1 2 3]
 [2 3 4]]

 

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

  • 이름 특성이 있는 배열 클래스 만들기
  • NamedArray라는 class를 선언하여 array에 이름이 붙을 수 있게 설정
class NamedArray(np.ndarray):
    def __new__(cls, array, name="no name"):
        obj = np.asarray(array).view(cls)
        obj.name = name
        return obj
    def __array_finalize__(self, obj):
        if obj is None: return
        self.info = getattr(obj, 'name', "no name")
        
Z = NamedArray(np.arange(10), "range_10")
print (Z.name)

>>>
range_10

 

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

  • 주어진 벡터를 고려하라. 두 번째 벡터로 색인화된 각 요소에 1을 추가하는 방법을 고려하라.
  • 인덱스를 나타내는 벡터인 a가 있을 때 (ex. 6은 Z의 7번째 원소를 뜻함) 인덱스의 개수를 세어서 Z에 더해줌
  • np.add.at()을 통해 해결
Z = np.ones(10)
a = np.random.randint(0,len(Z),20)
np.add.at(Z,a,1)
print(a)
print(Z)

>>>
[0 6 8 3 1 1 2 3 9 1 9 2 5 1 9 7 5 0 1 3]
[3. 6. 3. 4. 1. 3. 2. 2. 2. 4.]

 

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

  • 색인 목록(I)을 기반으로 벡터(X)의 요소를 배열(F)에 삽입하는 방법
  • X의 원소들을 I에 나와있는 인덱스에 각각 삽입하는 방법
  • np.bincount()를 이용
X = [1,2,3,4,5,6]
I = [1,4,5,6,7,8]
F = np.bincount(I,X)
print(F)

>>>
[0. 1. 0. 0. 2. 3. 4. 5. 6.]

 

66. Considering a (w,h,3) image of (dtype=ubyte), compute the number of unique colors (★★☆)

  • (dtype=ubyte)의 (w,h,3) 이미지를 고려하여 고유한 색상의 수를 계산한다.
  • 3차원 RGB 이미지의 고유 색상의 개수 계산
img = np.random.randint(0,2,(16,16,3)).astype(np.ubyte)
F = img[...,0]*(256*256) + img[...,1]*256 + img[...,2]
print(len(np.unique(F)))

>>>

8

 

67. Considering a four dimensions array, how to get sum over the last two axis at once? (★★★)

  • 4차원 배열을 고려할 때, 마지막 두 축에 대한 합을 한 번에 얻는 방법은 무엇입니까?
  • (2,2,3,3)의 뒤에서 두번째까지의 축(3,3)에 대한 합들을 구하는 방법
  • row와 col이 고정된 채로 채널 방향으로 합산함
z = np.random.randint(0, 10, (2,2,3,3))
print(z)
z.sum(axis=(-2,-1))

>>>
[[[[0 4 3]
   [8 7 6]
   [0 7 3]]

  [[6 6 8]
   [9 3 7]
   [6 4 0]]]


 [[[4 4 1]
   [4 2 8]
   [8 0 6]]

  [[4 8 7]
   [1 3 7]
   [1 5 9]]]]
   
array([[38, 49],
       [37, 45]])

 

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? (★★★)

  • 1차원 벡터 D를 고려했을 때, 부분집합 지수를 기술하는 동일한 크기의 벡터 S를 사용하여 D의 부분집합의 평균을 계산하는 방법은 무엇인가?
  • D_sums : S 인덱스를 고려하여 더하돼 D를 가중치(실제 더하는 숫자)로 하여 더함
  • Pandas의 gropuby()를 이용하면 더 쉽게 해결가능
D_sums
>>>
array([3.26787395, 3.20313736, 5.73453595, 6.5774351 , 3.60056041,
       6.18891079, 2.40678115, 6.4380369 , 6.03578166, 6.88186015])
       
D_counts
>>>
array([ 7,  6, 11, 12,  9, 14,  7, 12, 11, 11], dtype=int64)
# numpy의 bincount 이용
D = np.random.uniform(0,1,100)
S = np.random.randint(0,10,100)
D_sums = np.bincount(S, weights=D)
D_counts = np.bincount(S)
D_means = D_sums / D_counts
print(D_means)

>>>
[0.46683914 0.53385623 0.52132145 0.54811959 0.40006227 0.44206506
 0.34382588 0.53650308 0.54870742 0.62562365]
# pandas의 groupby 이용

import pandas as pd
print(pd.Series(D).groupby(S).mean())

>>>
0    0.466839
1    0.533856
2    0.521321
3    0.548120
4    0.400062
5    0.442065
6    0.343826
7    0.536503
8    0.548707
9    0.625624
dtype: float64

 

69. How to get the diagonal of a dot product? (★★★)

  • 곱 계산을 한 array의 대각선에 위치한 원소들만 뽑아내기
  • np.diag를 통해 배열의 대각행렬을 만들기
  • np.einsum()을 통해 해결하기 (설명 : https://ita9naiwa.github.io/numeric%20calculation/2018/11/10/Einsum.html)
A = np.random.uniform(0,1,(5,5))
B = np.random.uniform(0,1,(5,5))
# print(A)
# print(B)
print(np.dot(A,B))

# 느림 
np.diag(np.dot(A,B))

# 가장 빠른 버젼
np.einsum('ij,ji->i',A,B) 

>>>
[[1.32076382 1.45993875 1.14379092 0.95426732 1.78433494]
 [1.54519023 1.60359615 1.59356053 1.41450901 2.2970631 ]
 [0.74821021 1.0644123  0.70781144 0.87293559 1.24068129]
 [1.54656724 2.0705222  1.68433296 1.36645552 2.38825871]
 [1.274722   0.66600021 1.01874923 0.55718571 0.91588162]]
 
array([1.32076382, 1.60359615, 0.70781144, 1.36645552, 0.91588162])

 

70. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3 consecutive zeros interleaved between each value? (★★★)

  • 벡터 [1, 2, 3, 4, 5]를 고려하면 각 값 사이에 3 개의 연속 0이 삽입 된 새로운 벡터를 만드는 방법은 무엇입니까?
  • 벡터 사이의 0이 3개씩 들어간 것을 가정하여 zero배열을 만들어 놓은 뒤 1~5를 일정간격으로 삽입
Z = np.array([1,2,3,4,5])
nz = 3
Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))
print(Z0)
# [::n] 처음부터 끝까지 n간격으로 
Z0[::nz+1] = Z
print(Z0)

>>>
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 2. 0. 0. 0. 3. 0. 0. 0. 4. 0. 0. 0. 5.]
728x90

'Minding's Programming > Numpy & Pandas' 카테고리의 다른 글

[Numpy Exercise 100] 91번 ~ 100번 문제풀이  (0) 2022.01.03
[Numpy exercise 100] 81번 ~ 90번 문제풀이  (0) 2021.12.30
[Numpy exercise 100] 71번 ~ 80번 문제풀이  (0) 2021.12.28
[Numpy exercise 100] 31번 ~ 60번 문제풀이  (0) 2021.12.24
[Numpy exercise 100] 1번 ~ 30번 문제풀이  (0) 2021.12.23
'Minding's Programming/Numpy & Pandas' 카테고리의 다른 글
  • [Numpy exercise 100] 81번 ~ 90번 문제풀이
  • [Numpy exercise 100] 71번 ~ 80번 문제풀이
  • [Numpy exercise 100] 31번 ~ 60번 문제풀이
  • [Numpy exercise 100] 1번 ~ 30번 문제풀이
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터 엔지니어
    django
    머신러닝
    django python
    칼만필터는어렵지않아파이썬
    칼만필터는어렵지않아python
    AWS
    pygame
    칼만필터는어렵지않아
    칼만필터
    야구
    딥러닝
    질롱코리아
    KalmanFilter
    프로그래머스
    Python
    Airflow
    게임개발
    코딩테스트
    MLB
    KBO
    mlb stats api
    파이썬게임개발
    넘파이
    데이터분석
    파이게임
    에어플로우
    FastAPI
    파이썬
    메이저리그
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Numpy exercise 100] 61번 ~ 70번 문제풀이

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.