win +r 을 눌러 cmd 실행 이후 아래와같이 입력

scripts 폴더 안에 activate.bat 입력 후 실행화면

pip install numpy pandas matplotlib

프로젝트 생성하고 인터프리터 선택 경로 설정

설정창에서 패키지 있는지 확인

Numpy(Numerical Python)는 고성능의 과학계산 컴퓨팅과 데이터 분석에 필요한 패키지이다.
빠르고 메모리를 효율적으로 사용하며, 벡터 산술 연산과 세련된 브로드캐스팅 기능을 제공한다.
반복문을 작성할 필요없이 전체 데이터 배열에 대해 빠른 연산 위한 표준 수학함수를 제공한다.
배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구와 메모리에 올려진 파일을 사용할 수 있다.
선형대수, 난수 발생기, 푸리에 변환이 가능하다.
C, C++으로 쓰여진 코드를 통합할 수 있는 기능을 제공한다.
C API를 제공하며 데이터를 다른 저수준 언어로 쓰여진 외부 라이브러리에 쉽게 전달 할 수 있다.
Numpy 의 핵심 기능 인 N차원의 배열 객체 ndarray는 대규모 데이터 집합을 담을 수 있는 빠르고 유연한 자료 구조다.
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object : 배열을 반환하는 함수 또는 데이터 목록
dtype : 배열 요소의 데이터 타입
copy : 객체의 복사 여부
order : 배열의 메모리 저장구조 지정 C(rowmajor)orF(columnmajor)
subok : True 이면 배열을 상속받은 클래스일 경우 상속클래스형식으로, False 이면 기본 배열클래스형식으로 생성
ndmin : 결과 배열의 최소 차원(dimensions)수
배열 차원의 개수, 모양과 데이터 타입을 ndmin,shape,dtype 속성 에 저장
일정한 간격으로 배열된 배열을 만드는 arange(start, stop, step, dtype=None) 함수를 제공
array : 입력데이터(리스트, 튜플, 배열 또는 순차형데이터)를 ndarray로 변환.
dtype이 명시되지 않으면 자료형을 추정하고 입력데이터는 복사해서 생성
arange : 내장range함수와 유사하나 리스트 대신 ndarray반환
arr1 = np.arange(0, 10, 1)
print(arr1)
print(type(arr1))
arr2 = np.arange(0,10)
print(arr2)
arr3 = np.arange(10)
print(arr3)
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
linspace: 주어진 데이터범위를 일정한 간격으로 분할해서 배열을 만든 후 튜플로
반환
arr4 = np.linspace(-3, 3 , 5)
print(arr4)
[-3. -1.5 0. 1.5 3. ]
ones : 주어진 dtype으로 배열을 생성하고 내용을 모두1로 초기화
arr5 = np.ones((3,4))
print(arr5)
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
zeros : Ones와 같지만 내용을 0으로 채움
arr6 = np.zeros([2,3])
print(arr6)
[[0. 0. 0.]
[0. 0. 0.]]
empty : 메모리를 할당하여 새로운 배열을 생성하지만 값을 초기화하지 않음
arr5 = np.ones((3,4))
print(arr5)
arr6 = np.zeros([3,4])
print(arr6)
print()
arr7 = np.empty([3,4])
print(arr7)
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
번외 full
arr8 =np.full([3,4],100)
print(arr8)
[[100 100 100 100]
[100 100 100 100]
[100 100 100 100]]
like 계열 shape 를 따라가게됨
arr8 =np.full([2,3],100)
print(arr8)
arr9 = np.ones_like(arr8)
print(arr9)
arr10 = np.zeros_like(arr8)
print(arr10)
arr11 = np.full_like(arr8, 50)
print(arr11)
[[100 100 100]
[100 100 100]]
[[1 1 1]
[1 1 1]]
[[0 0 0]
[0 0 0]]
[[50 50 50]
[50 50 50]]
int8 , uint8 : i1,u1 (8비트 정수형)
int16, uint16 : i2,u2 (16비트 정수형)
int32, uint32 : i4,u4 (32비트 정수형)
int64, uint64 : i8,u8 (64비트 정수형)
float16 : f2 (반정밀도 부동소수점)
float32 : f4 (단정밀도 부동소수점)
float64 : f8 (배정밀도 부동소수점)
string_ : s (고정 길이 문자열)
import numpy as np
ldata1 = [10,20,30,40]
print(ldata1)
print(type(ldata1))
print()
arr1 = np.array(ldata1)
print(arr1)
print(type(arr1))
ldata2 = [[1,2,3,4],[5,6,7,8]]
print(ldata2)
arr2 = np.array(ldata2)
print(arr2)
print(arr2.shape)
print(arr2.dtype)
print()
ldata3 = [10.4,23,653.43,11]
print(ldata3)
arr3 = np.array(ldata3)
print(arr3)
print(arr3.dtype)
arr4 = np.array(ldata3, dtype=np.int32)
print(arr4)
print(arr4.dtype)
arr5 = arr4.astype(np.float64)
print(arr5)
ldata4 = ['1.23','332.32', 411]
arr6 = np.array(ldata4, dtype=np.float64)
print(arr6)
결과값
[10, 20, 30, 40]
<class 'list'>
[10 20 30 40]
<class 'numpy.ndarray'>
[[1, 2, 3, 4], [5, 6, 7, 8]]
[[1 2 3 4]
[5 6 7 8]]
(2, 4)
int64
[10.4, 23, 653.43, 11]
[ 10.4 23. 653.43 11. ]
float64
[ 10 23 653 11]
int32
[ 10. 23. 653. 11.]
[ 1.23 332.32 411. ]
코드를 입력하세요
결과값
코드를 입력하세요
numpy 배열은 for 반복문을 작성하지 않고 데이터를 일괄 처리할 수 있는 벡터화를 지원한다.
ldata1 = [10,20,30,40]
ldata2 = [100,200,300,400]
ldata3 = ldata1 + ldata2
print(ldata3)
print()
import numpy as np
arr1 = np.array(ldata1)
arr2 = np.array(ldata2)
arr3 = arr2 + arr1
print(arr3)
print()
arr4 = np.array([[10,20,30],
[40,50,60]])
arr5 = np.array([[1,2,3],
[5,6,7]])
print(arr4+arr5)
print()
print(arr4-arr5)
print()
print(arr4 * 10)
print()
print(1/ arr4)
print()
arr5 = np.array([100,200,300]) # 행 크기가 같을 때 broadcast 연산 가능
print(arr4 + arr5)
[10, 20, 30, 40, 100, 200, 300, 400]
[110 220 330 440]
[[11 22 33]
[45 56 67]]
[[ 9 18 27]
[35 44 53]]
[[100 200 300]
[400 500 600]]
[[0.1 0.05 0.03333333]
[0.025 0.02 0.01666667]]
[[110 220 330]
[140 250 360]]
numpy 배열은 인덱싱[i]과 슬라이싱 [i:j]과 불 인덱싱이 가능함
import numpy as np
arr1 = np.array([9,5,7,1,2,4,6,8])
print(arr1[0])
print(arr1[-1])
print(arr1[2:5])
print()
arr2 = np.array([[2,3,6,8],
[3,5,9,7],
[0,10,20,30]])
print(arr2)
print(arr2[1,0]) # 1 번행 0번 열 번째 값을 가져옴
print(arr2[1][0]) # 1 번행 을 먼저 선택후 그 안에 있는 0 번째 인덱스 값을 가져옴
print()
print(arr2[1:,2:]) # 1 번행부터 끝까지 2번열부터 끝까지
print(arr2[1:][2:]) # 1 번 행부터 끝가지 2번행부터 끝가지
9
8
[7 1 2]
[[ 2 3 6 8]
[ 3 5 9 7]
[ 0 10 20 30]]
3
3
[[ 9 7]
[20 30]]
[]
점수 출력하기
import numpy as np
data = []
bo = 'Y'
while True:
if bo.upper() == 'Y':
scores = list(map(int,input('영어 수학 국어 점수를 넣어주세요: ').split()))
data.append(scores)
bo = input('입력을 계속 진행하시겠습니까? (y/n)')
else:
data = np.array(data)
print(data)
print(f'국어 점수: {data[:,0]}')
print(f'영어 점수: {data[:,1]}')
print(f'수학 점수 : {data[:,2]}')
break
영어 수학 국어 점수를 넣어주세요: 100 90 80
입력을 계속 진행하시겠습니까? (y/n)y
영어 수학 국어 점수를 넣어주세요: 80 70 90
입력을 계속 진행하시겠습니까? (y/n)n
[[100 90 80]
[ 80 70 90]]
국어 점수: [100 80]
영어 점수: [90 70]
수학 점수 : [80 90]
불리언 배열을 통해 색인으로 사용할 수 있다. 이 때 사용한 불리언 배열은 반드시 색인 하려는 축의 길이와 동일한 길이를 가져야 한다.
arr6 = np.array([[3,2,8],
[0,3,7]])
arr7 = np.array([[9,1,7],
[2,2,9]])
print(arr6)
print()
print(arr7)
print()
print(arr6 > arr7)
print(arr7 > 5)
[[3 2 8]
[0 3 7]]
[[9 1 7]
[2 2 9]]
[[False True True]
[False True False]]
[[ True False True]
[False False True]]
ufunc라고 불리는 유니버셜 함수는 ndarray 안에 있는 데이터 원소별로 연산을 수행하는 함수다.
유니버셜 함수는 하나 이상의 스칼라 값을 받아서 하나 이상의 스칼라 결과 값을 반환하는 간단한 함수를 고속으로 수행할 수 있는 벡터화된 래퍼 함수 이다.
사칙연산 : add(), multiply(), negative(), exp(), log(), sqrt()
삼각함수 : sin(), cos(), hypot()
비트 단위: bitwise_and(), left_shift()
관계형, 논리: less(), logical_not(), equal()
maximum()과 minimum(), modf()
부동소수점에 적용할 수 있는 함수 : isinf(),infinite(),floor(),isnan()
numpy 배열에서는 데이터를 복사하지 않고 다른 모 양으로 바꿀 수 있는 reshape()를 제공한다.
where(c,a,b)함수 : 'x if 조건 else y'같은 삼항식의 벡터화된 버전이다.
any(),all()함수: 각각 일부 혹은 모든 배열의 엘리먼트가 True 라면 True를 반환
배열 전체 혹은 배열에서 한 축에 따르는 자료에 대한 통계를 계산하기 위한 수학 함수는 배열 메서드로 사용할 수 있다.
sum(), mean() : 배열 전체 합, 평균
cumsum(), cumprod() : 누적 합, 누적 곱
std(), var() : 표준편차, 분산
min(), max() : 최소값, 최대값
argmin(),argmax() : 최소 원소의 색인 값, 최대 원소의 색인 값
import numpy as np
arr = np.arange(10)
print(arr)
print(np.exp(arr))
print(np.square(arr))
print(np.sqrt(arr))
print()
print(np.cos(arr))
print(np.sin(arr))
print(np.tan(arr))
print()
x = np.array([5,2,8,6,11,6,99])
y = np.array([1,2,3,4,5,66,77])
print(np.maximum(x,y))
print(np.minimum(x,y))
print()
arr2 = np.array([32.23, 5.22, 8.321, 491.93])
print(np.modf(arr2))
[0 1 2 3 4 5 6 7 8 9]
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
2.98095799e+03 8.10308393e+03]
[ 0 1 4 9 16 25 36 49 64 81]
[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
[ 1. 0.54030231 -0.41614684 -0.9899925 -0.65364362 0.28366219
0.96017029 0.75390225 -0.14550003 -0.91113026]
[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427
-0.2794155 0.6569866 0.98935825 0.41211849]
[ 0. 1.55740772 -2.18503986 -0.14254654 1.15782128 -3.38051501
-0.29100619 0.87144798 -6.79971146 -0.45231566]
[ 5 2 8 6 11 66 99]
[ 1 2 3 4 5 6 77]
(array([0.23 , 0.22 , 0.321, 0.93 ]), array([ 32., 5., 8., 491.]))
import numpy as np
np.random.seed(12345)
arr = np.random.rand(5,4)
print(arr)
print()
print(f'평균 : {arr.mean()}') # np.mean(arr)
print(f'합계 : {arr.sum()}') # np.sum(arr)
print(f'표준편차 : {arr.std()}') # np.std(arr)
print(f'분산 : {arr.var()}') # np.var(arr)
print()
print(f'열 평균: {arr.mean(axis=0)}')
print(f'행 평균: {arr.mean(axis=1)}')
print()
arr2 = np.array([0,1,2,3,4,5,6,7,8,9])
print(f'누적합 : {arr2.cumsum()}')
arr3 = np.array([[0,1,2],
[3,4,5],
[6,7,8]])
print(f'열 누적곱: \n{arr3.cumprod(axis=0)}')
print(f'행 누적곱: \n{arr3.cumprod(axis=1)}')
[[0.92961609 0.31637555 0.18391881 0.20456028]
[0.56772503 0.5955447 0.96451452 0.6531771 ]
[0.74890664 0.65356987 0.74771481 0.96130674]
[0.0083883 0.10644438 0.29870371 0.65641118]
[0.80981255 0.87217591 0.9646476 0.72368535]]
평균 : 0.5983599561037484
합계 : 11.967199122074968
표준편차 : 0.29888354205334244
분산 : 0.08933137171035213
열 평균: [0.61288972 0.50882208 0.63189989 0.63982813]
행 평균: [0.40861768 0.69524034 0.77787451 0.26748689 0.84258035]
누적합 : [ 0 1 3 6 10 15 21 28 36 45]
열 누적곱:
[[ 0 1 2]
[ 0 4 10]
[ 0 28 80]]
행 누적곱:
[[ 0 0 0]
[ 3 12 60]
[ 6 42 336]]
import numpy as np
data = []
bo = 'Y'
datas =[]
while True:
if bo.upper() == 'Y':
name = input('이름을 입력하세요:')
scores = list(map(int,input('국어 영어 수학 점수를 넣어주세요: ').split()))
data.append(scores)
bo = input('입력을 계속 진행하시겠습니까? (y/n)')
datas.append(name)
else:
data = np.array(data)
datas = np.array(datas)
print(f'국어 총점: {data.sum(axis=0)[0]}, 영어 총점 : {data.sum(axis=0)[1]}, 수학 총점 : {data.sum(axis=0)[2]}')
names = input('출력할 학생의 이름을 입력하세요 :')
print(data[datas == names])
print(data)
print(f'{names} 과목 점수: {data[datas == names]}, 평균 : {data[datas == names].mean()}, 표준 편차:{data[datas == names].std():.2f},분산 :{data[datas == names].var():.2f}')
print(f'국어 점수: {data[:,0]}')
print(f'영어 점수: {data[:,1]}')
print(f'수학 점수 : {data[:,2]}')
break
이름을 입력하세요:lim
국어 영어 수학 점수를 넣어주세요: 100 90 80
입력을 계속 진행하시겠습니까? (y/n)y
이름을 입력하세요:hyo
국어 영어 수학 점수를 넣어주세요: 80 99 88
입력을 계속 진행하시겠습니까? (y/n)y
이름을 입력하세요:oh
국어 영어 수학 점수를 넣어주세요: 100 80 70
입력을 계속 진행하시겠습니까? (y/n)n
국어 총점: 280, 영어 총점 : 269, 수학 총점 : 238
출력할 학생의 이름을 입력하세요 :hyo
[[80 99 88]]
[[100 90 80]
[ 80 99 88]
[100 80 70]]
hyo 과목 점수: [[80 99 88]], 평균 : 89.0, 표준 편차:7.79,분산 :60.67
국어 점수: [100 80 100]
영어 점수: [90 99 80]
수학 점수 : [80 88 70]
import numpy as np
arr1 = np.array([[1,2,7],[6,7,9]])
print(arr1)
print()
barr1 = np.array([[True,False,True],[False,False,True]])
print(barr1)
print()
print(arr1[barr1])
print()
barr2 = np.array([False,True])
print(barr2)
print(arr1[barr2])
print()
barr3 = np.array([True,False,True])
print(barr3)
print()
print(arr1[:,barr3])
[[1 2 7]
[6 7 9]]
[[ True False True]
[False False True]]
[1 7 9]
[False True]
[[6 7 9]]
[ True False True]
[[1 7]
[6 9]]
불리언 예제 2
import numpy as np
np.random.seed(12345)
data = np.random.randn(7,4)
print(data)
names = np.array(['bob', 'joe', 'will', 'bob','will', 'joe', 'joe'])
print(names)
print()
print(names == 'bob')
print(data[names == 'bob'])
print()
print(data[names == 'bob',2:])
print()
print(data[names == 'bob', 3])
print(data < 0)
print()
print(data[data<0])
print()
data[data < 0] = 0
print(data)
print()
print(names != 'joe')
data[names != 'joe'] = 7
print()
print(data)
[[-0.20470766 0.47894334 -0.51943872 -0.5557303 ]
[ 1.96578057 1.39340583 0.09290788 0.28174615]
[ 0.76902257 1.24643474 1.00718936 -1.29622111]
[ 0.27499163 0.22891288 1.35291684 0.88642934]
[-2.00163731 -0.37184254 1.66902531 -0.43856974]
[-0.53974145 0.47698501 3.24894392 -1.02122752]
[-0.5770873 0.12412128 0.30261356 0.52377207]]
['bob' 'joe' 'will' 'bob' 'will' 'joe' 'joe']
[ True False False True False False False]
[[-0.20470766 0.47894334 -0.51943872 -0.5557303 ]
[ 0.27499163 0.22891288 1.35291684 0.88642934]]
[[-0.51943872 -0.5557303 ]
[ 1.35291684 0.88642934]]
[-0.5557303 0.88642934]
[[ True False True True]
[False False False False]
[False False False True]
[False False False False]
[ True True False True]
[ True False False True]
[ True False False False]]
[-0.20470766 -0.51943872 -0.5557303 -1.29622111 -2.00163731 -0.37184254
-0.43856974 -0.53974145 -1.02122752 -0.5770873 ]
[[0. 0.47894334 0. 0. ]
[1.96578057 1.39340583 0.09290788 0.28174615]
[0.76902257 1.24643474 1.00718936 0. ]
[0.27499163 0.22891288 1.35291684 0.88642934]
[0. 0. 1.66902531 0. ]
[0. 0.47698501 3.24894392 0. ]
[0. 0.12412128 0.30261356 0.52377207]]
[ True False True True True False False]
[[7. 7. 7. 7. ]
[1.96578057 1.39340583 0.09290788 0.28174615]
[7. 7. 7. 7. ]
[7. 7. 7. 7. ]
[7. 7. 7. 7. ]
[0. 0.47698501 3.24894392 0. ]
[0. 0.12412128 0.30261356 0.52377207]]
불리언 예제 3
import numpy as np
data = []
bo = 'Y'
datas =[]
while True:
if bo.upper() == 'Y':
name = input('이름을 입력하세요:')
scores = list(map(int,input('영어 수학 국어 점수를 넣어주세요: ').split()))
data.append(scores)
bo = input('입력을 계속 진행하시겠습니까? (y/n)')
datas.append(name)
else:
data = np.array(data)
datas = np.array(datas)
names = input('출력할 학생의 이름을 입력하세요 :')
print(data[datas == names])
print(data)
# print(f'국어 점수: {data[:,0]}')
# print(f'영어 점수: {data[:,1]}')
# print(f'수학 점수 : {data[:,2]}')
break
이름을 입력하세요:kim
영어 수학 국어 점수를 넣어주세요: 100 90 80
입력을 계속 진행하시겠습니까? (y/n)y
이름을 입력하세요:lee
영어 수학 국어 점수를 넣어주세요: 80 70 60
입력을 계속 진행하시겠습니까? (y/n)n
출력할 학생의 이름을 입력하세요 :lee
[[80 70 60]]
[[100 90 80]
[ 80 70 60]]
불리언 예제 4
import numpy as np
np.random.seed(12345)
arr = np.random.randn(100)
print((arr>0).sum())
bools = np.array([[False,False,True,False],
[False,False,True,True]])
print(bools.sum())
print()
print(bools.any())
print(bools.any(axis=1))
print(bools.any(axis=0))
print()
print(bools.all(axis=0))
print()
data = np.random.randn(10,4) * 4
print(data)
print()
print(data[(data > 3).any(axis=1)])
57
3
True
[ True True]
[False False True True]
[False False True False]
[[-6.26262918 -2.25016075 -0.13065656 -3.71602481]
[-1.93029058 -0.14505538 4.38156024 3.92371391]
[-2.35795074 6.32680038 -2.1149393 1.82800749]
[ 3.71987504 -6.27708242 -4.08994791 -1.6113077 ]
[ 0.88194745 -0.77360443 2.67663335 -6.59593928]
[-9.01118899 -4.66732887 1.41442841 2.80844069]
[-1.09827682 -0.55656875 0.43062889 -2.4261805 ]
[-1.66825763 -0.06802815 -4.89658114 -7.20335965]
[ 6.53894482 3.95603321 1.83176057 2.22061764]
[ 5.2268789 -1.76221428 -1.20540112 1.99516596]]
[[-1.93029058 -0.14505538 4.38156024 3.92371391]
[-2.35795074 6.32680038 -2.1149393 1.82800749]
[ 3.71987504 -6.27708242 -4.08994791 -1.6113077 ]
[ 6.53894482 3.95603321 1.83176057 2.22061764]
[ 5.2268789 -1.76221428 -1.20540112 1.99516596]]
import numpy as np
arr = np.arange(8)
print(arr)
print()
arr2 = arr.reshape((4,2))
print(arr2)
print()
ldata = [10,20,30,40,50,60]
arr3 = np.reshape(ldata,(3,2))
print(arr3)
print(type(arr3))
print()
print(arr3.T)
[0 1 2 3 4 5 6 7]
[[0 1]
[2 3]
[4 5]
[6 7]]
[[10 20]
[30 40]
[50 60]]
<class 'numpy.ndarray'>
[[10 30 50]
[20 40 60]]
정렬 예제 2
import numpy as np
np.random.seed(12345)
arr = np.random.randn(5,3)
print(arr)
print()
arr.sort(axis=1)
print(arr)
print()
arr.sort(axis=0)
print(arr)
print(arr[::-1])
[[-0.20470766 0.47894334 -0.51943872]
[-0.5557303 1.96578057 1.39340583]
[ 0.09290788 0.28174615 0.76902257]
[ 1.24643474 1.00718936 -1.29622111]
[ 0.27499163 0.22891288 1.35291684]]
[[-0.51943872 -0.20470766 0.47894334]
[-0.5557303 1.39340583 1.96578057]
[ 0.09290788 0.28174615 0.76902257]
[-1.29622111 1.00718936 1.24643474]
[ 0.22891288 0.27499163 1.35291684]]
[[-1.29622111 -0.20470766 0.47894334]
[-0.5557303 0.27499163 0.76902257]
[-0.51943872 0.28174615 1.24643474]
[ 0.09290788 1.00718936 1.35291684]
[ 0.22891288 1.39340583 1.96578057]]
[[ 0.22891288 1.39340583 1.96578057]
[ 0.09290788 1.00718936 1.35291684]
[-0.51943872 0.28174615 1.24643474]
[-0.5557303 0.27499163 0.76902257]
[-1.29622111 -0.20470766 0.47894334]]
1차원 ndarray를 위한 집합연산을 제공한다.
Unique(X) : 배열 x에서 중복된 원소를 제거한 후 정렬하여 반환한다.
Intersect1d(x,y) : 배열 x와 y에 공통적으로 존재하는 원소를 정렬하여 반환한다.
Union1d(x,y) : 두 배열의 합집합을 반환한다.
In1d(x,y) : X의 원소 중 y의 원소를 포함하는지를 나타내는 불리언 배열을 반환한다.
Setdiff1d(x,y) : X와 y의 차집합을 반환한다.
Setxor1d(x,y) : 한 배열에는 포함되지만 두 배열 모두에는 포함 되지 않는 원소들의 집합인 대칭차집합을 반환한다.
import numpy as np
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe'])
print(names)
print(np.unique(names))
print()
values = np.array([6,8,0,3,2,5,6])
print(values)
print(np.isin(values, [2,3,6]))
print(np.union1d(values, [2,3,6,8]))
print(np.intersect1d(values, [2,3,4,8]))
print(np.setdiff1d(values, [2,3,6,8]))
print(np.setxor1d(values, [2,3,6,8]))
['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe']
['Bob' 'Joe' 'Will']
[6 8 0 3 2 5 6]
[ True False False True True False True]
[0 2 3 5 6 8]
[2 3 8]
[0 5]
[0 5]
행렬의 곱셈, 분할, 행렬식, 정사각 행렬 수학 같은 선형대수를 위한 함수 제공
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,23],[-1,7],[8,9]])
print(x.dot(y))
[[ 28 64]
[ 67 181]]
numpy.random 모듈은 다양한 종류의 확률분포로부터 효과적으로 표본값을 생성하는데 사용된다.
seed: 난수 발생기의 seed를 지정한다.
premutataion : 임의의 순열을 반환한다.
shuffle : 리스트나 배열의 순서를 뒤섞는다.
rand : 균등분포에서 표본을 추출한다.
randint : 주어진 최소/최대 범위 안에서 임의의 난수를 추출한다.
randn : 표준편차가 1이고 평균값이 0 인 정규분포에서 표본을 추출한다.
binomial : 이항분포에서 표본을 추출한다.
normal : 정규분포(가우시안)에서 표본을 추출한다.
beta : 베타분포에서 표본을 추출한다.
chisquare : 카이제곱분포에서 표본을 추출한다.,
gamma : 감마분포에서 표본을 추출한다.
uniform : 균등(0,1)에서 표본을 추출한다.
import numpy as np
from PIL.ImageOps import scale
np.random.seed(12345)
data = np.random.normal(loc=10, scale=5, size=[100,3])
print(data)
print(data.mean())
print(data.std())
print()
data2 = np.random.randn(1000,3)
print(data2)
print(data2.mean())
print(data2.std())
print()
data3 = np.random.randint(low=1, high=10, size=[10,3])
print(data3)
print()
data4 = np.arange(10)
print(data4)
np.random.shuffle(data4)
print(data4)
print()
data5 = np.arange(10)
print(data5)
print(np.random.permutation(data5))
print(data5)
배열 이어붙이기
numpy.concatenate 는 배열의 목록을 받아서 주어진 axis 에 따라 하나의 배열로 합쳐준다.
numpy.vstack, hstack 함수를 이용하면 일반적인 이어붙이기 작업을 쉽게 처리할 수 있다.
배열 쌓기
numpy.r,c는 배열 쌓기를 좀더 편하게 해준다.
간접 정렬
주어진 키를 가지고 데이터를 정렬하려면 어떤 순서로 나열해야 하는지 알려주는 정수 색인이 담긴 배열이 필요하다. numpy.argsor()는 이를 지원한다.
import numpy as np
np.random.seed(12345)
values = np.array([5,0,1,3,2])
indexer = values.argsort()
print(indexer)
print()
arr = np.random.randn(3,5)
arr[0] = values
print(arr)
print()
print(arr[:,arr[0].argsort()])
print()
data = np.arange(30).reshape(5,6)
np.random.shuffle(data)
print(data)
print()
print(data[data[:,0].argsort()])
print(data[np.argsort(data[:,0])])
[1 2 4 3 0]
[[ 5. 0. 1. 3. 2. ]
[ 1.39340583 0.09290788 0.28174615 0.76902257 1.24643474]
[ 1.00718936 -1.29622111 0.27499163 0.22891288 1.35291684]]
[[ 0. 1. 2. 3. 5. ]
[ 0.09290788 0.28174615 1.24643474 0.76902257 1.39340583]
[-1.29622111 0.27499163 1.35291684 0.22891288 1.00718936]]
[[12 13 14 15 16 17]
[ 6 7 8 9 10 11]
[24 25 26 27 28 29]
[ 0 1 2 3 4 5]
[18 19 20 21 22 23]]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]]
예제 2
import numpy as np
arr1 = np.arange(1,7).reshape(2,3)
arr2 = np.arange(7,13).reshape(2,3)
print(arr1)
print()
print(arr2)
print()
print(np.concatenate([arr1,arr2], axis=0))
print(np.concatenate([arr1,arr2], axis=1))
print()
print(np.vstack([arr1, arr2]))
print()
print(np.hstack([arr1, arr2]))
print()
arr3 = np.arange(6)
arr4 = np.arange(6).reshape(3,2)
arr5 = np.random.randn(3,2)
print(arr3)
print()
print(arr4)
print()
print(arr5)
print()
print(np.r_[arr4,arr5])
print()
print(np.c_[np.r_[arr4,arr5] ,arr3])
[[1 2 3]
[4 5 6]]
[[ 7 8 9]
[10 11 12]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
[0 1 2 3 4 5]
[[0 1]
[2 3]
[4 5]]
[[-1.33456402 -0.54017761]
[ 0.59152749 0.66611519]
[ 1.34084114 -0.27839935]]
[[ 0. 1. ]
[ 2. 3. ]
[ 4. 5. ]
[-1.33456402 -0.54017761]
[ 0.59152749 0.66611519]
[ 1.34084114 -0.27839935]]
[[ 0. 1. 0. ]
[ 2. 3. 1. ]
[ 4. 5. 2. ]
[-1.33456402 -0.54017761 3. ]
[ 0.59152749 0.66611519 4. ]
[ 1.34084114 -0.27839935 5. ]]