01.array

 # -*- coding: utf-8 -*-
 """
 Numpy 패키지 특징
  - 선형대수(벡터, 행렬) 연산에 효과적인 함수 제공
  - list 차이점 : 다차원 배열, 선형대수 연산, 속도 고속
  - Series 공통점
    -> 수학/통계 함수
    -> 범위 수정, 블럭 연산
    -> indexing/slicing 기능
  - n차원 배열 객체 생성 함수
    1. random 함수
    2. array 함수
    3. sampling 함수
    4. arange 함수
 """

 import numpy as np

 # numpy 1차원 자료구조
 lst = [1,2,3]
 arr = np.array(lst)
 print(lst) # [1, 2, 3]
 #print(lst**2) # error
 print(arr) # [1 2 3]
 print(arr**2) # [1 4 9]
 print(type(arr)) # <class 'numpy.ndarray'>

 lst2 = [1, "two", False]
 print(lst2) # [1, 'two', False]

 arr2 = np.array(lst2)
 print(arr2) # ['1' 'two' 'False']
 print(arr2.shape) # (3,)

 # 1. random 함수 : 난수 생성
 #help(np.random.randn)

 data = np.random.randn(3, 4) # 3행4열-12난수 생성
 print(data)
 '''
 [[ 0.21625386 -1.11271239  1.26352269 -0.29090546]
  [ 1.19998039 -0.93916248 -0.96475192 -0.71720834]
  [-0.35985917  0.46820202  0.20267762  0.56218989]]
 '''

 for row in data :
     print('행 평균 :', row.mean())
     print('행 합계 :', row.sum())

 # 1) 수학/통계 함수
 print('합계=', data.sum())
 print('평균=', data.mean())
 print('분산=',data.var())
 print('표준편차=',data.std())

 # 2) 블럭연산
 print(data + data) # 2배

 # 3) indexing
 print(data[2,2]) # 3행3열
 print(data[:,2]) # 3열 전체 

 # 2. array 함수 : 다차원 배열 

 # 1) 단일 list - 1차원
 lst1 = [3, 5.6, 4, 7, 8]
 arr1 = np.array(lst1)
 print(arr1)

 # 분산/표준편차
 print('분산=', arr1.var())
 print('표준편차=', arr1.std())
 '''
 분산= 3.4016000000000006
 표준편차= 1.8443427013437608

 모집단 분산, 표준편차
 분산 = sum((x-avg)**2) / n
 표본 분산
 분산 = sum((x-avg)**2) / n-1
 '''
 avg = arr1.mean()
 diff = arr1 - avg # braodcast
 var_result = sum(diff**2) / len(arr1)
 print('분산=', var_result)
 # 분산= 3.4016000000000006
 std_result = np.sqrt(var_result)
 print('표준편차=', std_result)
 '''
 분산= 3.4016000000000006
 표준편차= 1.8443427013437608
 '''

 # 2) 중첩 list ->  2차원
 lst2 = [[1,2,3,4,5], [6,7,8,9,10]]
 print(lst2)
 arr2  = np.array(lst2)
 print(arr2)
 print(arr2.shape) # (2, 5)
 print(np.shape(arr2)) # (2, 5)

 # ppt. 21
 print(arr2[1,:]) # 2행 전체 - [ 6  7  8  9 10]
 print(arr2[:,2]) # 3열 전체 - [3 8]
 print(arr2[1,2]) # 2행3열 - 8
 print(arr2[:,1:3])
 '''
 [[2 3]
  [7 8]]
 '''

 # broadcast 연산(선형대수)
 # - 작은 차원이 큰 차원으로 늘어남 

 # 1) scala(0) vs vector(1)
 print(arr1) # [3.  5.6 4.  7.  8. ]
 print(arr1 * 0.5) # [1.5 2.8 2.  3.5 4. ]

 # 2) scala(0) vs matrix(2)
 print(arr2 * 0.5)

 # 3) vector(1) vs matrix(2)
 print(arr1 + arr2)
 '''
 [3.  5.6 4.  7.  8. ]
    +
 [[ 1  2  3  4  5]
  [ 6  7  8  9 10]]
    =
 [[ 4.   7.6  7.  11.  13. ]
  [ 9.  12.6 12.  16.  18. ]]
 '''

 # 3. sampling 함수

 # 1) choice함수 : 관측치 행 번호 추출
 num = list(range(11)) # 0~10
 print(num)
 n = len(num)

 #np.random.choice : 패키지.모듈.함수()
 idx = np.random.choice(n, 5, replace=False)
 # replace=False : 비복원
 print(idx) # [4 3 1 5 0]

 import pandas as pd 

 score = pd.read_csv("../data/score_iq.csv")
 print(score.info())
 '''
 RangeIndex: 150 entries, 0 to 149
 Data columns (total 6 columns):
 '''

 # train : 70%, test : 30%
 n=len(score)

 idx = np.random.choice(n, int(n*0.7), replace=False)

 # pandas -> numpy
 np_score = np.array(score)
 print(np_score.shape) # (150, 6)

 train_set = np_score[idx, :]
 print(train_set.shape) # (105, 6)

 # test set : list+for
 # [실행문-3  for-1  if-2]
 test_idx = [i  for i in range(150) if i not in idx]
 print(test_idx)

 test_set = np_score[test_idx, :]
 print(test_set.shape) # (45, 6)

 # 2) shuffle 함수
 #help(np.random.shuffle) # x : array or list

 print(np_score[:10,:])

 np.random.shuffle(np_score) # array
 print(np_score[:10,:])

 # 4. arange 함수 : range(n) : 0~n-1 동일
 zerr = np.zeros((3, 5))
 print(zerr)
 '''
 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]
 '''

 cnt = 0
 for i in np.arange(3) : # 0~2
     for j in np.arange(5) : # 0~4
         cnt += 1 # 카운터
         zerr[i,j] = cnt

 print(zerr)
 '''
 [[ 1.  2.  3.  4.  5.]
  [ 6.  7.  8.  9. 10.]
  [11. 12. 13. 14. 15.]]
 '''
 cnt = 0
 for i in range(3) : # 0~2
     for j in range(5) : # 0~4
         cnt += 1 # 카운터
         zerr[i,j] = cnt

 print(zerr)
 '''
 [[ 1.  2.  3.  4.  5.]
  [ 6.  7.  8.  9. 10.]
  [11. 12. 13. 14. 15.]]
 '''

02.indexing

 # -*- coding: utf-8 -*-
 """
 numpy indexing
   - 2,3차원 indexing
   - boolean indexing
 """

 import numpy as np

 # 1. indexing
 '''
 1차원 : obj[index]
 2차원 : obj[row, col] - row default
 3차원 : obj[side, row, col] - side default
 '''

 # 2차원 indexing
 arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
 print(arr2d.shape) # (3, 3)

 print(arr2d[1]) # 2행 전체 - [4 5 6]
 print(arr2d[:,1]) # 2열 전체 - [2 5 8]
 print(arr2d[1,2]) # 2행3열 - 6

 # 3차원 indexing
 arr3d = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
 print(arr3d)
 print(arr3d.shape) # (2, 2, 3)

 print(arr3d[1]) # 2면 전체
 print(arr3d[1, 0]) # 2면 1행 전체
 print(arr3d[1, 0, 2]) # 2면 1행 3열
 '''
 [[ 7  8  9]
  [10 11 12]]
 [7 8 9]
 9
 '''

 print(arr3d[1, :, :2])
 '''
 [[ 7  8]
  [10 11]]
 '''

 # 4. boolean indexing
 data = np.random.randn(3, 4) # 12개
 print(data)

 # 부울리언 색인
 result = data[data >= 0.7]
 print(result)

 # 0.3 ~ 0.7
 #result = data[data >= 0.3 and data <= 0.7]

 result2 = data[np.logical_and(data >= 0.3, data <= 0.7)]
 print(result2)
 '''
 [1.06451721 0.9287353 ]
 [0.6895027]
 '''

03.reshape

 # -*- coding: utf-8 -*-
 """
  reshape : 모양 변경
   - 1차원 배열 -> 2차원 배열
   - 2차원 배열 -> 다른 모양 변경
  T : 전치행렬(행렬 위치 변경)
  swapaxis : 축 변경
  transpose : 축 번호 순서에 의해서 구조 변경
 """

 import numpy as np

 # 1. reshape
 lst = range(1,13) # 1~12

 # 1차원 -> 2차원
 arr2d = np.array(lst).reshape(3,4) # 1차원 -> 2차원
 print(arr2d)
 print(arr2d.shape) # (3, 4)

 # 2차원 모양 변경
 arr2d = np.array(arr2d).reshape(2,6) # 주의 : 수 일치
 print(arr2d.shape) # (2, 6)

 # 2차원 -> 3차원
 arr3d = np.array(arr2d).reshape(1,4,3)
 print(arr3d)
 print(arr3d.shape) # (1, 4, 3)
 '''
 [[[ 1  2  3]
   [ 4  5  6]
   [ 7  8  9]
   [10 11 12]]]
 '''

 # 2. 전치행렬(행<->열)
 print(arr2d.T)
 print(arr2d.T.shape) # (6, 2)

 # 3. swapaxes
 # axis = 0(행), axis=1(열)
 print(arr2d.swapaxes(0,1)) # (6, 2)

 # 4. transpose
 '''
 1차원 : 효과 없음
 2차원 : 행<-열 교환 = 전치행렬
 3차원 : 축 순서에 의해서 구조 변경(o)
 '''

 arr3d = np.arange(1,25).reshape(4, 2, 3) # 1~24
 print(arr3d)
 print(arr3d.shape) # (4, 2, 3) - (면,행,열)

 # 3차원 : (0,1,2) -> (2,1,0) : 역순
 arr3d_def = arr3d.transpose() # default : (2,1,0)
 print(arr3d_def)
 print(arr3d_def.shape) # (3, 2, 4)

 # (0,1,2) -> (2,0,1)
 arr3d_user = arr3d.transpose(2,0,1)
 print(arr3d_user)
 print(arr3d_user.shape) # (3, 4, 2)

04.axis_dot

 # -*- coding: utf-8 -*-
 """
  1. axis : 행축, 열축
  2. np.dot() : 행렬곱 - tf.matmul()
  3. ANN에서 행렬곱
     - 은닉층(H) = 입력(X) * 가중치(W) + 편향(B)
  4. 회귀분석 모델 행렬곱
     - 예측치(Y) = 입력(X) * 기울기(a) + 절편(b)
 """

 import numpy as np

 # 1. axis : ppt. 56
 # 행축 : 열들의 모임(열 단위)
 # 열축 : 행들의 모음(행 단위)

 arr = np.arange(1,21).reshape(5,4)
 print(arr)

 print('전체 합계=',arr.sum())
 print('열 단위 합계=',arr.sum(axis=0)) # 열 단위
 print('행 단위 합계=',arr.sum(axis=1)) # 행 단위
 '''
 전체 합계= 210
 열 단위 합계= [45 50 55 60]
 행 단위 합계= [10 26 42 58 74]
 '''

 # 2. np.dot(a, b) # a,b : 행렬
 a = np.array([[1,1], [0,1]])
 print(a.shape) # (2, 2)
 b = np.array([[2,3], [1,5]])
 print(b.shape) # (2, 2)
 '''
 행렬곱 조건
 1. a,b 모두 행렬
 2. a(열) == b(행) : 수 일치
 '''

 c = np.dot(a, b)
 print(c)
 print(c.shape)
 '''
 a(r,c) * b(r,c) = c(a(r), b(c))
 [[3 8]
  [1 5]]
 (2, 2)
 '''

 print(np.ndim(a), np.ndim(b), np.ndim(c))
 # 2 2 2

 # 1) 1개 관측치 : x(1,2) * w(2,2) = h(1,2)
 x = np.array([[0.1, 0.2]])
 w = np.array([[1,2], [2,3]])
 print(x.shape) # (1, 2)
 print(w.shape) # (2, 2)

 h = np.dot(x, w)
 print('h=', h) # h= [[0.5 0.8]]
 print(h.shape) # (1, 2)

 # 2) 2개 관측치 : x(2,2) * w(2,3) = h(2,3)
 x = np.array([[0.1, 0.2], [0.3, 0.4]]) # (2,2)
 w = np.array([[1,2,3],[2,3,4]]) # (2,3)

 h = np.dot(x, w)
 print('h=')
 print(h)
 print(h.shape) # (2, 3)

05.dot_example

 # -*- coding: utf-8 -*-
 """
 ANN Model example
 """

 import numpy as np

 # 1. ANN model
 '''
 input x : image(28x28)
 hidden node : 32개
 weight : 28x32
 '''

 # x data 생성
 print('>>> x image data <<<')
 x_img = np.random.randint(0,2, 784) # image vector(0 or 1)
 x_img2d = x_img.reshape(28, 28) # matrix
 print(x_img2d)
 print(x_img2d.shape) # (28, 28)

 # weight data 생성
 print('>>> weight data <<<')
 weight = np.random.randn(28, 32)
 print(weight)
 print(weight.shape) # (28, 32)

 # hidden node 생성
 print('>>> hidden node <<<')
 # (28, 28) * (28, 32) = (28, 32)
 hidden = np.dot(x_img2d, weight)
 print(hidden)
 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. 【数学建模】day14-建立GM(1,1)预测评估模型应用

    学习建立GM(1,1)灰色预测评估模型,解决实际问题: SARS疫情对某些经济指标的影响问题 一.问题的提出 2003 年的 SARS 疫情对中国部分行业的经济发展产生了一定影响,特别是对部分 疫情较 ...

  2. EventBus 线程切换原理

    主要问题其实只有两个,其一:如何判断当前发送事件的线程是否是主线程:其二:如何在接收事件时指定线程并执行: 一个一个来看. 1.如何判断是否在主线程发送 EventBus在初始化的时候会初始化一个Ma ...

  3. 【XSY3042】石像 拓扑排序 状压DP 洲阁筛

    题目大意 有 \(n\) 个整数 \(a_1,a_2,\ldots,a_n\),每个数的范围是 \([1,m]\).还有 \(k\) 个限制,每个限制 \(x_i,y_i\) 表示 \(a_{x_i} ...

  4. 【APIO2016】【UOJ205】【LOJ2568】烟花表演 可合并堆

    题目大意 有一棵树,每条边都有一个边权,现在你要修改边权,使得修改后根到所有叶子的距离相等. 要求所有边权非负. 修改的代价为\(\lvert\)每条边修改前的边权\(-\)修改后的边权\(\rver ...

  5. license.json

    {"license":{"uid":"5359f3d1-8c8c-462b-a17b-b7eb0c3ddb8f","type&qu ...

  6. 在mobaxterm内连接deb使用lrzsz进行文件传输

    lrzsz随手传文件还是挺方便的. 1.apt install lrzsz 2.rz 3.右键 或者control右键选择 send file useing Z-modem 选择文件上传 接收同理

  7. 求一个数组中重复数字的个数,要求复杂度为O(n)

    给出代码 #include <stdio.h> #include <unistd.h> #include <iostream> #include <memor ...

  8. 分享4个运维平台工具OSSIM、Ansible的学习思路

    对于当今企业安全来说,真正价值不在于亡羊补牢,也不在于一个或多个高危漏洞.企业在乎的是如何防患于未然,如何快速定位攻击,如何快速解决安全问题.OSSIM作为开源的安全信息管理平台,对于企业的需求来说毋 ...

  9. windows telnet 模拟 http请求

    1. 开启windows自带的telnet客户端(控制面板 --> 程序 --> 启用或关闭windows功能 --> ) 2. 打开cmd,使用Telnet客户端 3. 按ctrl ...

  10. Kubernetes之Pod 控制器

    定义Pod的常用资源 pods.spec.containers - name    <string>   #containers 的名字 image    <string>  ...