관리 메뉴

IT journey

Python-배열 2편 본문

개인공부공간/Python

Python-배열 2편

step 2021. 6. 17. 21:49
728x90
반응형

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :)

※ 도움이 될 만한 포스팅

참고로, 최근 포스팅 순서대로 정리해두었습니다.

Python- 리스트, 튜플/ 배열 1편

Python - 내장함수 2편과 이터레이터,제너레이터,코루틴,정규표현식

Python - 모듈(외장함수) 2편(feat.파일 입출력과 추상클래스...)

Python - 설치없이 이용하기,실행, 사용법

Python - 모듈(외장함수) 1편

Python - 클래스 2편

Python - 클래스 1편

Python-함수

Python - 제어문

Python-자료형(사전형,집합)

Python-자료형(리스트,튜플)

Python - 자료형 (숫자형,문자열,불린형)

Python - 내장함수 1편

 

728x90

 

우선, 스칼라부터 3차원 배열까지 알아봅시다.

1. 스칼라

○ 스칼라는 하나의 숫자입니다. 그래서 shape를 구하려해도 차원이 나오지 않습니다.

○그 예는 아래와 같습니다.

import numpy as np
a = np.array(3)
a.shape

2. 1차원 배열

○ 1차원 배열은 백터입니다. 예는 Python- 리스트, 튜플/ 배열 1편 글에서 확인해주시길 부탁드립니다.

 

Python- 리스트, 튜플/ 배열 1편

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :) ※ 도움이 될 만한 포스팅 참고로, 최근 포스팅 순서대로 정리해두었습니다. Python - 내장함수 2편과 이터레이터,제너레이터,

step-journey.tistory.com

○ 벡터의 내적을 구할 때는 dot이라는 함수를 이용합니다.

import numpy as np
a = np.array([10,20,30])
b = np.array([40,50,60])
print(a.dot(b)) #print(np.dot(a,b))와 같은 의미입니다.
np.sum(a) #a에 있는 각 요소들의 합이 나옵니다.

참고로, 벡터의 내적을 구하는 방법을 인덱스 구할 때 쓰는 방식을 빌려 설명하자면

a[0]×b[0]+a[1]×b[1]+a[2]×b[2]를 하면 됩니다.

3. 2차원 배열

○ 2차원 배열은 행렬입니다. 예는 Python- 리스트, 튜플/ 배열 1편 글에서 확인해주시길 부탁드립니다.

 

Python- 리스트, 튜플/ 배열 1편

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :) ※ 도움이 될 만한 포스팅 참고로, 최근 포스팅 순서대로 정리해두었습니다. Python - 내장함수 2편과 이터레이터,제너레이터,

step-journey.tistory.com

행렬의 곱을 구할 때에는 dot이라는 함수를 이용합니다.

○ 전치행렬을 구할 때에는 T 속성을 이용합니다.

import numpy as np
x = np.array([[10,20],[50,60]])
y = np.array([[70,80],[110,120]])
#x행렬과 y행렬의 곱
print(x.dot(y)) #print(np.dot(x,y))
#각 row들의 합
print(np.sum(x,axis=0))
#각 column들의 합
print(np.sum(x,axis=1))
#전치행렬
print(x.T)
#1이 들어있는 2차원 배열
a=np.ones((2,3),"i") #dtype은 정수
a
b=np.ones_like(x,"f") #dtype은 실수
b
#0이 들어있는 2차원 배열
c=np.zeros((2,3),"i")
d=np.zeros_like(x,"f")
c
d

참고로, x = np.array([[10,20],[50,60]])를 행렬로 나타내면 아래 그림과 같습니다.

y = np.array([[70,80],[110,120]]) 행렬로 나타내는 것은 x = np.array([[10,20],[50,60]])를 행렬로 나타내는 것을 참조하시면 충분히 아실 수 있습니다.

행렬의 곱을 구하는 방법은 R-벡터,행렬 글에서 참고해주시길 부탁드립니다.

 

R-벡터,행렬

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :) 벡터 벡터에 데이터 추가(스칼라 및 벡터들의 결합) (1) Combine 함수 c() x (2) 함수 append()는 추가되는 스칼라 혹은 벡터의 위치의

step-journey.tistory.com

빨간색은 axis=0을 나타낸 예이고 파란색은 axis=1을 나타낸 예입니다.

○ 전치행렬에 대한 설명은 R-벡터,행렬 글에서 참조해주시길 부탁드립니다.

 

R-벡터,행렬

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :) 벡터 벡터에 데이터 추가(스칼라 및 벡터들의 결합) (1) Combine 함수 c() x (2) 함수 append()는 추가되는 스칼라 혹은 벡터의 위치의

step-journey.tistory.com

4. 3차원 배열

3차원은 면, 행, 열로 이루어져 있습니다.

import numpy as np
x = np.array([[[10,20,30,40],
[50,60,70,80],
[90,100,110,120]],
[[130,140,150,160],
[170,180,190,200],
[210,220,230,240]]])
x
#깊이(면)의 개수
print(len(x))
#행의 개수
print(len(x[0]))
#열의 개수
print(len(x[0][0]))
#1이 들어있는 3차원 배열
a=np.ones((2,3,4),"i")
b=np.ones_like(x,"f")
a
b
#0이 들어있는 3차원 배열
c=np.zeros((2,3,4),"i")
d=np.zeros_like(x,"f")
c
d

▶ 참고로, 아래 코드에서 나온 x로 면, 행, 열을 아래 나온 그림에 표시한 색으로 알아보겠습니다.

빨간색은 면이 되는 것이고, 파란색은 행, 노란색은 열이 됩니다.

코드를 돌리면 왜 면, 행, 열의 개수가 왜 그렇게 나오는지 이제는 이해가 될것입니다.

▶ 참고로, np.zeros((2,3,4),"i")에서 나왔던 i에 대해서 생각해보는 시간을 가져보겠습니다.

i는 dtype의 접두사로서, int(정수형)을 말합니다. 

또 다른 dtype의 접두사는 아래 표와 같습니다.

b boolean b
i int(정수형) i8(64비트)
u 부호없는 정수 u8(64비트)
f 부동소수점 f8(64비트)
c 목소수 부동소수점 c16(128비트)
0 객체 0(객체에 대한 포이터)
S 바이트  문자열 S24(24글자)
U 유니코드 문자열 U24(24 유니코드 글자)

▶ 참고로, inf 는 무한대, NaN 는 not a number, N/A 는 not available(not applicable) 입니다.

 

-------------------------위 배열들을 복사하고 싶을 시--------------------

= 이나 copy함수나 deepcopy함수를 씁니다.

  • 변수A=변수B 를 쓰게 되면 변수A에 있는 내용이 하나만 변경되더라도 변수B의 내용도 변경되어있는 모습을 확인할 수 있습니다.
  • 변수 A = 변수B.copy를 쓰게 되면 변수A에 있는 내용이 하나만 변경되더라도 변수B의 내용도 변경되어있는 모습을 확인할 수 있습니다.
  • 변수 A = copy.deepcopy(B)를 쓰게 되면 변수 A가 변경된다하더라도 변수B의 내용은 변경되지 않습니다.

이제, 스칼라부터 3차원 배열까지 알아보았으니, 브로드캐스팅에 대해 알아봅시다.

브로드캐스팅(Broadcasting)

○ 정의 -> 차원이 다른 배열들간의 연산이 가능하게 하는 것을 말합니다.

○ 조건 -> 차원의 짝이 맞거나 차원의 크기가 최소 1이라면 가능합니다.  

○ 예

import numpy as np
a = np.array([[70,80],[110,120]]) 
b = np.array([1, 2])
c = 10
d= np.arange(6).reshape(6,1)
a+b #+,-,/,*,% 연산됩니다.
a*c
b+d

- 참고로, a+b의 연산을 간략히 아래 그림을 통해 설명해보겠습니다.

a와 b를 브로드캐스팅 하게 되면 빨간색이 더 추가되어 연산합니다.

이제, 브로드캐스팅 예에 대한 코드를 돌린 후의 결과에 대해 이해 하실 수 있을 껍니다.

- 참고로, a÷c의 연산을 간략히 아래 그림을 통해 설명해보겠습니다.

a와 c를 브로드캐스팅 하게 되면 빨간색이 더 추가되어 연산합니다.

이제, 브로드캐스팅 예에 대한 코드를 돌린 후의 결과에 대해 이해 하실 수 있을 껍니다.

- 참고로, b+d의 연산을 간략히 아래 그림을 통해 설명해보겠습니다.

bd를 브로드캐스팅 하게 되면 빨간색이 더 추가되어 연산합니다.

이제, 브로드캐스팅 예에 대한 코드를 돌린 후의 결과에 대해 이해 하실 수 있을 껍니다.


 

728x90
반응형
Comments