Numpy란 무엇인가요?
Numpy는 행렬 연산 기능을 제공하는 Python용 과학 컴퓨팅 라이브러리로 일반적으로 Scipy 및 matplotlib와 함께 사용됩니다. 이는 큰 행렬을 저장하고 처리하는 데 사용할 수 있으며 Python 자체의 중첩 목록 구조(행렬을 나타내는 데에도 사용할 수 있음)보다 훨씬 더 효율적입니다.
NumPy(Numeric Python)는 행렬 데이터 유형, 벡터 처리 및 정교한 연산 라이브러리와 같은 다양한 고급 수치 프로그래밍 도구를 제공합니다. 엄격한 숫자 처리를 위해 제작되었습니다. 이는 로렌스 리버모어(Lawrence Livermore)와 같은 핵심 과학 컴퓨팅 조직뿐만 아니라 많은 대규모 금융 회사에서 주로 사용되며 NASA는 원래 C++, Fortran 또는 Matlab을 사용하여 수행되었던 일부 작업을 처리하는 데 이를 사용합니다.
다차원 배열
다차원 배열 유형: numpy.ndarray
numpy.array 메소드
를 사용하여 목록 또는 튜플 변수를 매개변수로 사용하여 1차원 배열을 생성합니다.
>>> print(np.array([1,2,3,4])) [1 2 3 4] >>> print(np.array((1.2,2,3,4))) [ 1.2 2. 3. 4. ] >>> print type(np.array((1.2,2,3,4))) <type 'numpy.ndarray'>
목록 또는 튜플 변수를 요소로 사용하여 2차원 배열을 생성합니다.
>>> print(np.array([[1,2],[3,4]])) [[1 2] [3 4]]
데이터 유형 지정
예: numpy.int32, numpy.int16, numpy.float64 등:
>>> print np.array((1.2,2,3,4), dtype=np.int32) [1 2 3 4]
numpy.arange 메서드 사용
>>> print(np.arange(15)) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] >>> print type(np.arange(15)) <type 'numpy.ndarray'> >>> print np.arange(15).reshape(3,5) [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] >>> print type(np.arange(15).reshape(3,5)) <type 'numpy.ndarray'>
numpy.linspace 메서드 사용
예를 들어 9를 생성하려면 1부터 3까지의 숫자:
>>> print(np.linspace(1,3,10)) [ 1. 1.22222222 1.44444444 1.66666667 1.88888889 2.11111111 2.33333333 2.55555556 2.77777778 3. ]
특정 행렬 구성
numpy.zeros, numpy.ones, numpy.eye 사용
특정 행렬 구성
>>> print(np.zeros((3,4))) [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] >>> print(np.ones((4,3))) [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]] >>> print(np.eye(4)) [[ 1. 0. 0. 0.] [ 0. 1. 0. 0.] [ 0. 0. 1. 0.] [ 0. 0. 0. 1.]]
3차원 배열 만들기:
>>> print(np.ones((3,3,3))) [[[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]] [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]] [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]]]
배열 속성 가져오기
>>> a = np.zeros((2,3,2)) >>> print(a.ndim) #数组的维数 3 >>> print(a.shape) #数组每一维的大小 (2, 3, 2) >>> print(a.size) #数组的元素数 12 >>> print(a.dtype) #元素类型 float64 >>> print(a.itemsize) #每个元素所占的字节数 8
배열 인덱싱, 슬라이싱, 할당
>>>a = np.array( [[2,3,4],[5,6,7]] ) >>> print(a) [[2 3 4] [5 6 7]] >>> print(a[1,2]) #index从0开始 7 >>> print a[1,:] [5 6 7] >>> print(a[1,1:2]) [6] >>> a[1,:] = [8,9,10] #直接赋值 >>> print(a) [[ 2 3 4] [ 8 9 10]]
요소를 조작하는 데 for 사용
>>> for x in np.linspace(1,3,3): ... print(x) ... 1.0 2.0 3.0
기본 배열 연산
먼저 배열 a와 b를 구성합니다.
>>> a = np.ones((2,2)) >>> b = np.eye(2) >>> print(a) [[ 1. 1.] [ 1. 1.]] >>> print(b) [[ 1. 0.] [ 0. 1.]]
배열의 덧셈, 뺄셈, 곱셈, 나눗셈
>>> print(a > 2) [[False False] [False False]] >>> print(a+b) [[ 2. 1.] [ 1. 2.]] >>> print(a-b) [[ 0. 1.] [ 1. 0.]] >>> print(b*2) [[ 2. 0.] [ 0. 2.]] >>> print((a*2)*(b*2)) [[ 4. 0.] [ 0. 4.]] >>> print(b/(a*2)) [[ 0.5 0. ] [ 0. 0.5]] >>> print((b*2)**4) [[ 16. 0] [ 0 16.]]
에 나오는 방법을 사용하세요. 배열 객체
>>> a.sum() #a的元素个数 4.0 >>> a.sum(axis=0) #计算每一列(二维数组中类似于矩阵的列)的和 array([ 2., 2.]) >>> a.min() 1.0 >>> a.max() 1.0 使用numpy下的方法 >>> np.sin(a) array([[ 0.84147098, 0.84147098], [ 0.84147098, 0.84147098]]) >>> np.max(a) 1.0 >>> np.floor(a) array([[ 1., 1.], [ 1., 1.]]) >>> np.exp(a) array([[ 2.71828183, 2.71828183], [ 2.71828183, 2.71828183]]) >>> np.dot(a,a) ##矩阵乘法 array([[ 2., 2.], [ 2., 2.]])
배열 병합
numpy에서 vstack 및 hstack 함수 사용:
>>> a = np.ones((2,2)) >>> b = np.eye(2) >>> print(np.vstack((a,b))) #顾名思义 v--vertical 垂直 [[ 1. 1.] [ 1. 1.] [ 1. 0.] [ 0. 1.]] >>> print(np.hstack((a,b))) #顾名思义 h--horizonal 水平 [[ 1. 1. 1. 0.] [ 1. 1. 0. 1.]]
이 두 함수가 얕은 함수와 관련되어 있는지 확인하세요. 이 문제를 복사하세요.
>>> c = np.hstack((a,b)) >>> print c [[ 1. 1. 1. 0.] [ 1. 1. 0. 1.]] >>> a[1,1] = 5 >>> b[1,1] = 5 >>> print c [[ 1. 1. 1. 0.] [ 1. 1. 0. 1.]]
a와 b의 요소 변경은 c에 영향을 미치지 않습니다.
깊은 복사 배열
배열 객체에는 얕은 복사와 깊은 복사 방법이 있지만 일반적으로 깊은 복사가 더 많이 사용됩니다.
>>> a = np.ones((2,2)) >>> b = a >>> print(b is a) True >>> c = a.copy() #深拷贝 >>> c is a False
기본 행렬 연산
전치:
>>> a = np.array([[1,0],[2,3]]) >>> print(a) [[1 0] [2 3]] >>> print(a.transpose()) [[1 2] [0 3]]
numpy.linalg 행렬 연산에 대한 메서드
>>> import numpy.linalg as nplg1
고유값 및 고유벡터:
>>> print nplg.eig(a) (array([ 3., 1.]), array([[ 0. , 0.70710678], [ 1. , -0.70710678]]))
행렬 객체
numpy 모듈의 행렬 객체는 numpy.matrix이며, 행렬 데이터 처리, 행렬 계산 및 기본 통계 함수, 전치, 가역성 등의 처리를 포함합니다. 복소수는 모두 행렬 객체에 있습니다.
class numpy.matrix(data,dtype,copy):
데이터가 ndarray인 행렬을 반환합니다. 개체 또는 문자 형식입니다.
dtype: 데이터 유형입니다.
copy: bool 유형입니다.
>>> a = np.matrix('1 2 7; 3 4 8; 5 6 9') >>> a #矩阵的换行必须是用分号(;)隔开,内部数据必须为字符串形式(‘ ’),矩 matrix([[1, 2, 7], #阵的元素之间必须以空格隔开。 [3, 4, 8], [5, 6, 9]]) >>> b=np.array([[1,5],[3,2]]) >>> x=np.matrix(b) #矩阵中的data可以为数组对象。 >>> x matrix([[1, 5], [3, 2]])
행렬 객체의 속성
matrix.T transpose
: 행렬의 전치 행렬을 반환합니다
matrix.H hermitian (conjugate) transpose
: 복소 행렬의 켤레 요소 행렬을 반환합니다.
matrix.I inverse
: 행렬의 역행렬을 반환합니다
matrix.A 기본 배열
: 행렬의 배열은
행렬 객체의 방법
all([axis, out])을 기반으로 합니다. : 주어진 축을 따라 모든 행렬 객체를 결정합니다. 요소가 true인지 여부(0이 아닌 것은 true를 의미함)
any([axis, out]): 행렬 요소가 true인지 여부를 결정합니다. 요소가 참인 경우 참인 동안은 주어진 축 방향을 따라 참입니다.
argmax([axis, out]) : 주어진 축 방향을 따라 가장 큰 요소의 인덱스(가장 큰 요소의 위치)를 반환합니다.
argmin([axis, out]): 주어진 축 방향을 따라 가장 작은 요소의 인덱스(가장 작은 요소의 위치)를 반환합니다.
argsort( [axis, kind, order]): 정렬된 인덱스 행렬을 반환합니다
astype(dtype[, order, casting, subok, copy]): 행렬 데이터를 복사하고 데이터 유형은 지정된 데이터 유형
byteswap(inplace) 배열 요소의 바이트를 교환합니다
choose(choices[, out, mode]): 주어진 인덱스에 따라 새로운 데이터 매트릭스를 얻습니다(인덱스는 선택 항목에서 제공됩니다)
clip(a_min, a_max[ , out]): 새 행렬을 반환합니다. 주어진 요소보다 큰 요소는 a_max이고, 작은 요소는 a_min
압축(조건[, 축, 출력]): 조건을 만족하는 행렬을 반환합니다
conj() :返回复数的共轭复数
conjugate() :返回所有复数的共轭复数元素
copy([order]) :复制一个矩阵并赋给另外一个对象,b=a.copy()
cumprod([axis, dtype, out]) :返回沿指定轴的元素累积矩阵
cumsum([axis, dtype, out]) :返回沿指定轴的元素累积和矩阵
diagonal([offset, axis1, axis2]) :返回矩阵中对角线的数据
dot(b[, out]) :两个矩阵的点乘
dump(file) :将矩阵存储为指定文件,可以通过pickle.loads()或者numpy.loads()如:a.dump(‘d:\a.txt’)
dumps() :将矩阵的数据转存为字符串.
fill(value) :将矩阵中的所有元素填充为指定的value
flatten([order]) :将矩阵转化为一个一维的形式,但是还是matrix对象
getA() :返回自己,但是作为ndarray返回
getA1():返回一个扁平(一维)的数组(ndarray)
getH() :返回自身的共轭复数转置矩阵
getI() :返回本身的逆矩阵
getT() :返回本身的转置矩阵
max([axis, out]) :返回指定轴的最大值
mean([axis, dtype, out]) :沿给定轴方向,返回其均值
min([axis, out]) :返回指定轴的最小值
nonzero() :返回非零元素的索引矩阵
prod([axis, dtype, out]) :返回指定轴方型上,矩阵元素的乘积.
ptp([axis, out]) :返回指定轴方向的最大值减去最小值.
put(indices, values[, mode]) :用给定的value替换矩阵本身给定索引(indices)位置的值
ravel([order]) :返回一个数组,该数组是一维数组或平数组
repeat(repeats[, axis]) :重复矩阵中的元素,可以沿指定轴方向重复矩阵元素,repeats为重复次数
reshape(shape[, order]) :改变矩阵的大小,如:reshape([2,3])
resize(new_shape[, refcheck]) :改变该数据的尺寸大小
round([decimals, out]) :返回指定精度后的矩阵,指定的位数采用四舍五入,若为1,则保留一位小数
searchsorted(v[, side, sorter]) :搜索V在矩阵中的索引位置
sort([axis, kind, order]) :对矩阵进行排序或者按轴的方向进行排序
squeeze([axis]) :移除长度为1的轴
std([axis, dtype, out, ddof]) :沿指定轴的方向,返回元素的标准差.
sum([axis, dtype, out]) :沿指定轴的方向,返回其元素的总和
swapaxes(axis1, axis2):交换两个轴方向上的数据.
take(indices[, axis, out, mode]) :提取指定索引位置的数据,并以一维数组或者矩阵返回(主要取决axis)
tofile(fid[, sep, format]) :将矩阵中的数据以二进制写入到文件
tolist() :将矩阵转化为列表形式
tostring([order]):将矩阵转化为python的字符串.
trace([offset, axis1, axis2, dtype, out]):返回对角线元素之和
transpose(*axes) :返回矩阵的转置矩阵,不改变原有矩阵
var([axis, dtype, out, ddof]) :沿指定轴方向,返回矩阵元素的方差
view([dtype, type]) :生成一个相同数据,但是类型为指定新类型的矩阵。
举例
>>> a = np.asmatrix('0 2 7; 3 4 8; 5 0 9') >>> a.all() False >>> a.all(axis=0) matrix([[False, False, True]], dtype=bool) >>> a.all(axis=1) matrix([[False], [ True], [False]], dtype=bool)
Astype方法
>>> a.astype(float) matrix([[ 12., 3., 5.], [ 32., 23., 9.], [ 10., -14., 78.]])
Argsort方法
>>> a=np.matrix('12 3 5; 32 23 9; 10 -14 78') >>> a.argsort() matrix([[1, 2, 0], [2, 1, 0], [1, 0, 2]])
Clip方法
>>> a matrix([[ 12, 3, 5], [ 32, 23, 9], [ 10, -14, 78]]) >>> a.clip(12,32) matrix([[12, 12, 12], [32, 23, 12], [12, 12, 32]])
Cumprod方法
>>> a.cumprod(axis=1) matrix([[ 12, 36, 180], [ 32, 736, 6624], [ 10, -140, -10920]])
Cumsum方法
>>> a.cumsum(axis=1) matrix([[12, 15, 20], [32, 55, 64], [10, -4, 74]])
Tolist方法
>>> b.tolist() [[12, 3, 5], [32, 23, 9], [10, -14, 78]]
Tofile方法
>>> b.tofile('d:\\b.txt')
compress()方法
>>> from numpy import *
>>> a = array([10, 20, 30, 40]) >>> condition = (a > 15) & (a < 35) >>> condition array([False, True, True, False], dtype=bool) >>> a.compress(condition) array([20, 30]) >>> a[condition] # same effect array([20, 30]) >>> compress(a >= 30, a) # this form a so exists array([30, 40]) >>> b = array([[10,20,30],[40,50,60]]) >>> b.compress(b.ravel() >= 22) array([30, 40, 50, 60]) >>> x = array([3,1,2]) >>> y = array([50, 101]) >>> b.compress(x >= 2, axis=1) # illustrates the use of the axis keyword array([[10, 30], [40, 60]]) >>> b.compress(y >= 100, axis=0) array([[40, 50, 60]])