01.array

  1. # -*- coding: utf-8 -*-
  2. """
  3. Numpy 패키지 특징
  4. - 선형대수(벡터, 행렬) 연산에 효과적인 함수 제공
  5. - list 차이점 : 다차원 배열, 선형대수 연산, 속도 고속
  6. - Series 공통점
  7. -> 수학/통계 함수
  8. -> 범위 수정, 블럭 연산
  9. -> indexing/slicing 기능
  10. - n차원 배열 객체 생성 함수
  11. 1. random 함수
  12. 2. array 함수
  13. 3. sampling 함수
  14. 4. arange 함수
  15. """
  16.  
  17. import numpy as np
  18.  
  19. # numpy 1차원 자료구조
  20. lst = [1,2,3]
  21. arr = np.array(lst)
  22. print(lst) # [1, 2, 3]
  23. #print(lst**2) # error
  24. print(arr) # [1 2 3]
  25. print(arr**2) # [1 4 9]
  26. print(type(arr)) # <class 'numpy.ndarray'>
  27.  
  28. lst2 = [1, "two", False]
  29. print(lst2) # [1, 'two', False]
  30.  
  31. arr2 = np.array(lst2)
  32. print(arr2) # ['1' 'two' 'False']
  33. print(arr2.shape) # (3,)
  34.  
  35. # 1. random 함수 : 난수 생성
  36. #help(np.random.randn)
  37.  
  38. data = np.random.randn(3, 4) # 3행4열-12난수 생성
  39. print(data)
  40. '''
  41. [[ 0.21625386 -1.11271239 1.26352269 -0.29090546]
  42. [ 1.19998039 -0.93916248 -0.96475192 -0.71720834]
  43. [-0.35985917 0.46820202 0.20267762 0.56218989]]
  44. '''
  45.  
  46. for row in data :
  47. print('행 평균 :', row.mean())
  48. print('행 합계 :', row.sum())
  49.  
  50. # 1) 수학/통계 함수
  51. print('합계=', data.sum())
  52. print('평균=', data.mean())
  53. print('분산=',data.var())
  54. print('표준편차=',data.std())
  55.  
  56. # 2) 블럭연산
  57. print(data + data) # 2배
  58.  
  59. # 3) indexing
  60. print(data[2,2]) # 3행3열
  61. print(data[:,2]) # 3열 전체
  62.  
  63. # 2. array 함수 : 다차원 배열
  64.  
  65. # 1) 단일 list - 1차원
  66. lst1 = [3, 5.6, 4, 7, 8]
  67. arr1 = np.array(lst1)
  68. print(arr1)
  69.  
  70. # 분산/표준편차
  71. print('분산=', arr1.var())
  72. print('표준편차=', arr1.std())
  73. '''
  74. 분산= 3.4016000000000006
  75. 표준편차= 1.8443427013437608
  76.  
  77. 모집단 분산, 표준편차
  78. 분산 = sum((x-avg)**2) / n
  79. 표본 분산
  80. 분산 = sum((x-avg)**2) / n-1
  81. '''
  82. avg = arr1.mean()
  83. diff = arr1 - avg # braodcast
  84. var_result = sum(diff**2) / len(arr1)
  85. print('분산=', var_result)
  86. # 분산= 3.4016000000000006
  87. std_result = np.sqrt(var_result)
  88. print('표준편차=', std_result)
  89. '''
  90. 분산= 3.4016000000000006
  91. 표준편차= 1.8443427013437608
  92. '''
  93.  
  94. # 2) 중첩 list -> 2차원
  95. lst2 = [[1,2,3,4,5], [6,7,8,9,10]]
  96. print(lst2)
  97. arr2 = np.array(lst2)
  98. print(arr2)
  99. print(arr2.shape) # (2, 5)
  100. print(np.shape(arr2)) # (2, 5)
  101.  
  102. # ppt. 21
  103. print(arr2[1,:]) # 2행 전체 - [ 6 7 8 9 10]
  104. print(arr2[:,2]) # 3열 전체 - [3 8]
  105. print(arr2[1,2]) # 2행3열 - 8
  106. print(arr2[:,1:3])
  107. '''
  108. [[2 3]
  109. [7 8]]
  110. '''
  111.  
  112. # broadcast 연산(선형대수)
  113. # - 작은 차원이 큰 차원으로 늘어남
  114.  
  115. # 1) scala(0) vs vector(1)
  116. print(arr1) # [3. 5.6 4. 7. 8. ]
  117. print(arr1 * 0.5) # [1.5 2.8 2. 3.5 4. ]
  118.  
  119. # 2) scala(0) vs matrix(2)
  120. print(arr2 * 0.5)
  121.  
  122. # 3) vector(1) vs matrix(2)
  123. print(arr1 + arr2)
  124. '''
  125. [3. 5.6 4. 7. 8. ]
  126. +
  127. [[ 1 2 3 4 5]
  128. [ 6 7 8 9 10]]
  129. =
  130. [[ 4. 7.6 7. 11. 13. ]
  131. [ 9. 12.6 12. 16. 18. ]]
  132. '''
  133.  
  134. # 3. sampling 함수
  135.  
  136. # 1) choice함수 : 관측치 행 번호 추출
  137. num = list(range(11)) # 0~10
  138. print(num)
  139. n = len(num)
  140.  
  141. #np.random.choice : 패키지.모듈.함수()
  142. idx = np.random.choice(n, 5, replace=False)
  143. # replace=False : 비복원
  144. print(idx) # [4 3 1 5 0]
  145.  
  146. import pandas as pd
  147.  
  148. score = pd.read_csv("../data/score_iq.csv")
  149. print(score.info())
  150. '''
  151. RangeIndex: 150 entries, 0 to 149
  152. Data columns (total 6 columns):
  153. '''
  154.  
  155. # train : 70%, test : 30%
  156. n=len(score)
  157.  
  158. idx = np.random.choice(n, int(n*0.7), replace=False)
  159.  
  160. # pandas -> numpy
  161. np_score = np.array(score)
  162. print(np_score.shape) # (150, 6)
  163.  
  164. train_set = np_score[idx, :]
  165. print(train_set.shape) # (105, 6)
  166.  
  167. # test set : list+for
  168. # [실행문-3 for-1 if-2]
  169. test_idx = [i for i in range(150) if i not in idx]
  170. print(test_idx)
  171.  
  172. test_set = np_score[test_idx, :]
  173. print(test_set.shape) # (45, 6)
  174.  
  175. # 2) shuffle 함수
  176. #help(np.random.shuffle) # x : array or list
  177.  
  178. print(np_score[:10,:])
  179.  
  180. np.random.shuffle(np_score) # array
  181. print(np_score[:10,:])
  182.  
  183. # 4. arange 함수 : range(n) : 0~n-1 동일
  184. zerr = np.zeros((3, 5))
  185. print(zerr)
  186. '''
  187. [[0. 0. 0. 0. 0.]
  188. [0. 0. 0. 0. 0.]
  189. [0. 0. 0. 0. 0.]]
  190. '''
  191.  
  192. cnt = 0
  193. for i in np.arange(3) : # 0~2
  194. for j in np.arange(5) : # 0~4
  195. cnt += 1 # 카운터
  196. zerr[i,j] = cnt
  197.  
  198. print(zerr)
  199. '''
  200. [[ 1. 2. 3. 4. 5.]
  201. [ 6. 7. 8. 9. 10.]
  202. [11. 12. 13. 14. 15.]]
  203. '''
  204. cnt = 0
  205. for i in range(3) : # 0~2
  206. for j in range(5) : # 0~4
  207. cnt += 1 # 카운터
  208. zerr[i,j] = cnt
  209.  
  210. print(zerr)
  211. '''
  212. [[ 1. 2. 3. 4. 5.]
  213. [ 6. 7. 8. 9. 10.]
  214. [11. 12. 13. 14. 15.]]
  215. '''

02.indexing

  1. # -*- coding: utf-8 -*-
  2. """
  3. numpy indexing
  4. - 2,3차원 indexing
  5. - boolean indexing
  6. """
  7.  
  8. import numpy as np
  9.  
  10. # 1. indexing
  11. '''
  12. 1차원 : obj[index]
  13. 2차원 : obj[row, col] - row default
  14. 3차원 : obj[side, row, col] - side default
  15. '''
  16.  
  17. # 2차원 indexing
  18. arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
  19. print(arr2d.shape) # (3, 3)
  20.  
  21. print(arr2d[1]) # 2행 전체 - [4 5 6]
  22. print(arr2d[:,1]) # 2열 전체 - [2 5 8]
  23. print(arr2d[1,2]) # 2행3열 - 6
  24.  
  25. # 3차원 indexing
  26. arr3d = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
  27. print(arr3d)
  28. print(arr3d.shape) # (2, 2, 3)
  29.  
  30. print(arr3d[1]) # 2면 전체
  31. print(arr3d[1, 0]) # 2면 1행 전체
  32. print(arr3d[1, 0, 2]) # 2면 1행 3열
  33. '''
  34. [[ 7 8 9]
  35. [10 11 12]]
  36. [7 8 9]
  37. 9
  38. '''
  39.  
  40. print(arr3d[1, :, :2])
  41. '''
  42. [[ 7 8]
  43. [10 11]]
  44. '''
  45.  
  46. # 4. boolean indexing
  47. data = np.random.randn(3, 4) # 12개
  48. print(data)
  49.  
  50. # 부울리언 색인
  51. result = data[data >= 0.7]
  52. print(result)
  53.  
  54. # 0.3 ~ 0.7
  55. #result = data[data >= 0.3 and data <= 0.7]
  56.  
  57. result2 = data[np.logical_and(data >= 0.3, data <= 0.7)]
  58. print(result2)
  59. '''
  60. [1.06451721 0.9287353 ]
  61. [0.6895027]
  62. '''

03.reshape

  1. # -*- coding: utf-8 -*-
  2. """
  3. reshape : 모양 변경
  4. - 1차원 배열 -> 2차원 배열
  5. - 2차원 배열 -> 다른 모양 변경
  6. T : 전치행렬(행렬 위치 변경)
  7. swapaxis : 축 변경
  8. transpose : 축 번호 순서에 의해서 구조 변경
  9. """
  10.  
  11. import numpy as np
  12.  
  13. # 1. reshape
  14. lst = range(1,13) # 1~12
  15.  
  16. # 1차원 -> 2차원
  17. arr2d = np.array(lst).reshape(3,4) # 1차원 -> 2차원
  18. print(arr2d)
  19. print(arr2d.shape) # (3, 4)
  20.  
  21. # 2차원 모양 변경
  22. arr2d = np.array(arr2d).reshape(2,6) # 주의 : 수 일치
  23. print(arr2d.shape) # (2, 6)
  24.  
  25. # 2차원 -> 3차원
  26. arr3d = np.array(arr2d).reshape(1,4,3)
  27. print(arr3d)
  28. print(arr3d.shape) # (1, 4, 3)
  29. '''
  30. [[[ 1 2 3]
  31. [ 4 5 6]
  32. [ 7 8 9]
  33. [10 11 12]]]
  34. '''
  35.  
  36. # 2. 전치행렬(행<->열)
  37. print(arr2d.T)
  38. print(arr2d.T.shape) # (6, 2)
  39.  
  40. # 3. swapaxes
  41. # axis = 0(행), axis=1(열)
  42. print(arr2d.swapaxes(0,1)) # (6, 2)
  43.  
  44. # 4. transpose
  45. '''
  46. 1차원 : 효과 없음
  47. 2차원 : 행<-열 교환 = 전치행렬
  48. 3차원 : 축 순서에 의해서 구조 변경(o)
  49. '''
  50.  
  51. arr3d = np.arange(1,25).reshape(4, 2, 3) # 1~24
  52. print(arr3d)
  53. print(arr3d.shape) # (4, 2, 3) - (면,행,열)
  54.  
  55. # 3차원 : (0,1,2) -> (2,1,0) : 역순
  56. arr3d_def = arr3d.transpose() # default : (2,1,0)
  57. print(arr3d_def)
  58. print(arr3d_def.shape) # (3, 2, 4)
  59.  
  60. # (0,1,2) -> (2,0,1)
  61. arr3d_user = arr3d.transpose(2,0,1)
  62. print(arr3d_user)
  63. print(arr3d_user.shape) # (3, 4, 2)

04.axis_dot

  1. # -*- coding: utf-8 -*-
  2. """
  3. 1. axis : 행축, 열축
  4. 2. np.dot() : 행렬곱 - tf.matmul()
  5. 3. ANN에서 행렬곱
  6. - 은닉층(H) = 입력(X) * 가중치(W) + 편향(B)
  7. 4. 회귀분석 모델 행렬곱
  8. - 예측치(Y) = 입력(X) * 기울기(a) + 절편(b)
  9. """
  10.  
  11. import numpy as np
  12.  
  13. # 1. axis : ppt. 56
  14. # 행축 : 열들의 모임(열 단위)
  15. # 열축 : 행들의 모음(행 단위)
  16.  
  17. arr = np.arange(1,21).reshape(5,4)
  18. print(arr)
  19.  
  20. print('전체 합계=',arr.sum())
  21. print('열 단위 합계=',arr.sum(axis=0)) # 열 단위
  22. print('행 단위 합계=',arr.sum(axis=1)) # 행 단위
  23. '''
  24. 전체 합계= 210
  25. 열 단위 합계= [45 50 55 60]
  26. 행 단위 합계= [10 26 42 58 74]
  27. '''
  28.  
  29. # 2. np.dot(a, b) # a,b : 행렬
  30. a = np.array([[1,1], [0,1]])
  31. print(a.shape) # (2, 2)
  32. b = np.array([[2,3], [1,5]])
  33. print(b.shape) # (2, 2)
  34. '''
  35. 행렬곱 조건
  36. 1. a,b 모두 행렬
  37. 2. a(열) == b(행) : 수 일치
  38. '''
  39.  
  40. c = np.dot(a, b)
  41. print(c)
  42. print(c.shape)
  43. '''
  44. a(r,c) * b(r,c) = c(a(r), b(c))
  45. [[3 8]
  46. [1 5]]
  47. (2, 2)
  48. '''
  49.  
  50. print(np.ndim(a), np.ndim(b), np.ndim(c))
  51. # 2 2 2
  52.  
  53. # 1) 1개 관측치 : x(1,2) * w(2,2) = h(1,2)
  54. x = np.array([[0.1, 0.2]])
  55. w = np.array([[1,2], [2,3]])
  56. print(x.shape) # (1, 2)
  57. print(w.shape) # (2, 2)
  58.  
  59. h = np.dot(x, w)
  60. print('h=', h) # h= [[0.5 0.8]]
  61. print(h.shape) # (1, 2)
  62.  
  63. # 2) 2개 관측치 : x(2,2) * w(2,3) = h(2,3)
  64. x = np.array([[0.1, 0.2], [0.3, 0.4]]) # (2,2)
  65. w = np.array([[1,2,3],[2,3,4]]) # (2,3)
  66.  
  67. h = np.dot(x, w)
  68. print('h=')
  69. print(h)
  70. print(h.shape) # (2, 3)

05.dot_example

  1. # -*- coding: utf-8 -*-
  2. """
  3. ANN Model example
  4. """
  5.  
  6. import numpy as np
  7.  
  8. # 1. ANN model
  9. '''
  10. input x : image(28x28)
  11. hidden node : 32개
  12. weight : 28x32
  13. '''
  14.  
  15. # x data 생성
  16. print('>>> x image data <<<')
  17. x_img = np.random.randint(0,2, 784) # image vector(0 or 1)
  18. x_img2d = x_img.reshape(28, 28) # matrix
  19. print(x_img2d)
  20. print(x_img2d.shape) # (28, 28)
  21.  
  22. # weight data 생성
  23. print('>>> weight data <<<')
  24. weight = np.random.randn(28, 32)
  25. print(weight)
  26. print(weight.shape) # (28, 32)
  27.  
  28. # hidden node 생성
  29. print('>>> hidden node <<<')
  30. # (28, 28) * (28, 32) = (28, 32)
  31. hidden = np.dot(x_img2d, weight)
  32. print(hidden)
  33. print(hidden.shape)

02.Numpy的更多相关文章

  1. numpy学习笔记02

    简介 numpy.array() 数组对象,可以表示普通的一维数组,或者二维矩阵,或者任意数据:并且它可以对数组中的数据进行非常高效的运算,如:数据统计.图像处理.线性代数等 numpy 之所以能运行 ...

  2. [Pandas] 02 - Tutorial of NumPy

    Ref: NumPy 教程 这里主要是查缺补漏一些常用方法. 初步认识 矩阵常见知识点 矩阵操作 Ref: [Python] 01 - Number and Matrix[总结过一部分] 一.矩阵 ( ...

  3. [学习笔记] [数据分析] 02、NumPy入门与应用

    01.NumPy基本功能 ※ 数据类型的转换在实际操作过程中很重要!!! ※ ※ ndarray的基本索引与切片 ※ 布尔型数组的长度必须跟被索引的轴长度一致 花式索引是利用“整数数组”进行索引. 整 ...

  4. Numpy | 02 Ndarray 对象

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放同类型元素的多维数组. ndarr ...

  5. NumPy 学习(3): 通用函数

    1.  元素级别的函数 元素级别的函数也就是函数对数组中的每一个元素进行运算.例如: In [10]: arr = np.arange(10) In [11]: np.sqrt(arr) Out[11 ...

  6. numpy数组、向量、矩阵运算

    可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD ...

  7. numpy初识

    1,机器学习numpy 初识 1)numpy初识 import numpy num1= numpy.array([1,2,3]) dtype('num1') #查找类型 num1.dtype num1 ...

  8. Numpy - 多维数组(上)

    一.实验说明 numpy 包为 Python 提供了高性能的向量,矩阵以及高阶数据结构.由于它们是由 C 和 Fortran 实现的,所以在操作向量与矩阵时性能非常优越. 1. 环境登录 无需密码自动 ...

  9. numpy的初探

    # data = numpy.genfromtxt("C:\\Users\\Admin\Desktop\\111.txt", delimiter='\t', dtype='str' ...

随机推荐

  1. Python pip Unable--

    It is possible that pip does not get installed by default. One potential fix is: python -m ensurepip ...

  2. [模板] CDQ分治&&BZOJ3262:陌上花开

    简介 CDQ分治是分治的一种, 可以看做归并排序的扩展, 利用离线将一些 \(O(n)\) 的暴力优化到 \(O(log n)\). 它可以用来顶替一些高级(log)数据结构等. 一般地, CDQ分治 ...

  3. ZOJ 4097 Rescue the Princess

    在这个物欲横流的社会 oj冷漠无情 只有这xx还有些温度 越界就越界吧  wrong 怎么回事.... 给出一个图 然后给出q次询问 问是否存在v和w分别到u的路径且边不重复 在边双连通分量中 任意两 ...

  4. LoadRunner开发ftp协议接口之上传文件脚本

    Action() { //建立一个ftp对象 FTP ftp1=0; //建立FTP连接并登录 ftp_logon_ex(&ftp1,"ftpLogon", "U ...

  5. tensorflow 语音识别报错

    cuDnn由7.1版本改为7.4.2.24版本,成功

  6. Mock6 moco框架中如何加入header

    新建一个 startupWithHeader.json,这次在request里面添加了headers属性 [ { "description": "这是一个带header的 ...

  7. docker基本概念

    详细参考https://www.jianshu.com/p/9deb6f41d5bd

  8. Entity Framework入门教程(3)---EF中的上下文简介

    1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...

  9. 关于设计项目UI界面的软件工具

    关于画UI界面的软件,我在网上找了几个,今天式用这几款软件还可以 1.墨刀:国产的,这个专门画APP界面的,用起来比较简单,有免费版的,要注册才能用,提供云存储,收费版的云存储空间会多一些.网站: h ...

  10. [数分提高]2014-2015-2第6教学周第1次课讲义 3.3 Taylor 公式

    1. (Taylor 公式). 设 $f^{(n)}$ 在 $[a,b]$ 上连续, $f^{(n+1)}$ 在 $(a,b)$ 内存在, 试证: $ \forall\ x,x_0\in [a,b], ...