數據分析-Numpy模塊

簡介:Numpy:Numeric Python。
- 一個強大的N維數組對象Array
- 比較成熟的(廣播)函數庫
- 用於整合C/C++和Fortran代碼的工具包
- 實用的線性代數、傅里葉變換和隨機數生成函數
- numpy和稀疏矩陣運算包scipy配合使用更加強大

導入numpy庫,並查看numpy版本

import numpy as np
np.__version__

01-創建ndarray

  1. 使用np.array()由python list創建
#一維
test = np.array([1,2,3,4,5])

#多維
test = np.array([[1,2,3],[4,5,6]])

注意:
numpy默認ndarray的所有元素的類型是相同的
如果傳進來的列表中包含不同的類型,則統一爲同一類型,優先級:str>float>int

02-使用np的routines函數創建

包含以下常見創建方法:

1.np.ones(shape, dtype=None, order=’C’)

np.ones([3,3])
輸出結果:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

np.ones([3,3],dtype=int)
輸出結果:
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

2.np.zeros(shape, dtype=float, order=’C’)
3.np.full(shape, fill_value, dtype=None, order=’C’)

np.full([3,3],3.14)
輸出結果:
array([[ 3.14,  3.14,  3.14],
       [ 3.14,  3.14,  3.14],
       [ 3.14,  3.14,  3.14]])

4.np.eye(N, M=None, k=0, dtype=float)
對角線爲1其他的位置爲0

np.eye(4)
輸出結果:
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])


np.eye(441)
輸出結果:
array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.]])


np.eye(44,-1)
輸出結果:
array([[ 0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.]])

5.np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
6.np.arange([start, ]stop, [step, ]dtype=None)

等差數列
np.arange(0,10,2)
輸出結果:
array([0, 2, 4, 6, 8])

7.np.random.randint(low, high=None, size=None, dtype=’l’)

np.random.randint(0,10,5)
輸出結果:
array([0, 7, 2, 3, 7])

8.np.random.randn(d0, d1, …, dn)

np.random.randn(10)
# 每次每次都不一樣
輸出結果:
array([-1.74976547,  0.3426804 ,  1.1530358 , -0.25243604,  0.98132079,
        0.51421884,  0.22117967, -1.07004333, -0.18949583,  0.25500144])


//////////////////////////////////////////////////
np.random.seed(100)#隨機的種子,有了種子,每次都一樣
np.random.randn(10)

輸出結果:
array([ 0.37332715, -0.2887605 ,  0.04985088, -0.93815832, -0.4087037 ,
        1.13352254,  0.52713526, -0.76014192, -0.97292788,  0.16290446])

標準正太分佈

9.np.random.random(size=None)
生成0到1的隨機數,左閉右開

03-ndarray的屬性

4個必記參數:
- ndim:維度
- shape:形狀(各維度的長度)
- size:總長度
- dtype:元素類型

04-ndarray的基本操作

  1. 索引
    一維與列表完全一致 多維時同理
一維與列表完全一致 多維時同理
np.random.seed(1)
x = np.random.randint(10,size=[3,4,5])
print(x[2,0,0])
print(x)

5
[[[5 8 9 5 0]
  [0 1 7 6 9]
  [2 4 5 2 4]
  [2 4 7 7 9]]

 [[1 7 0 6 9]
  [9 7 6 9 1]
  [0 1 8 8 3]
  [9 8 7 3 6]]

 [[5 1 9 3 4]
  [8 1 4 0 3]
  [9 2 0 4 9]
  [2 7 7 9 8]]]
  1. 切片
    一維與列表完全一致 多維時同理
np.random.seed(0)
x = np.random.randint(100,size = (10,4))
x

輸出結果:
array([[44, 47, 64, 67],
       [67,  9, 83, 21],
       [36, 87, 70, 88],
       [88, 12, 58, 65],
       [39, 87, 46, 88],
       [81, 37, 25, 77],
       [72,  9, 20, 80],
       [69, 79, 47, 64],
       [82, 99, 88, 49],
       [29, 19, 19, 14]])

切片:

x[7:10]
切片結果:
array([[69, 79, 47, 64],
       [82, 99, 88, 49],
       [29, 19, 19, 14]
  1. 變形
    使用reshape函數,注意參數是一個tuple!
使用reshape函數,注意參數是一個tuple!
x = np.arange(0,16).reshape(4,4)
x

執行結果:


array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

類型是:
type(x.shape)

tuple
  1. 級聯
    np.concatenate() 級聯需要注意的點:
    級聯的參數是列表:一定要加中括號或小括號
    維度必須相同
    形狀相符
    【重點】級聯的方向默認是shape這個tuple的第一個值所代表的維度方向
    可通過axis參數改變級聯的方向
    np.hstack與np.vstack 水平級聯與垂直級聯

  2. 切分
    與級聯類似,三個函數完成切分工作:

    • np.split
    • np.vsplit
    • np.hsplit
  3. 副本

    • 所有賦值運算不會爲ndarray的任何元素創建副本。對賦值後的對象的操作也對原來的對象生效。
    • 可使用copy()函數創建副本

05-ndarray的聚合操作

  1. 求和np.sum
np.random.seed(0)
a = np.random.randint(1000,size = 100)
print(np.sum(a))

b = np.random.randint(1000,size = (3,4,5))
print(np.sum(b))

輸出:
52397
32865
  1. 最大最小值:np.max/ np.min
    同理

  2. 其他聚合操作

Function Name    NaN-safe Version    Description
np.sum    np.nansum    Compute sum of elements
np.prod    np.nanprod    Compute product of elements
np.mean    np.nanmean    Compute mean of elements
np.std    np.nanstd    Compute standard deviation
np.var    np.nanvar    Compute variance
np.min    np.nanmin    Find minimum value
np.max    np.nanmax    Find maximum value
np.argmin    np.nanargmin    Find index of minimum value
np.argmax    np.nanargmax    Find index of maximum value
np.median    np.nanmedian    Compute median of elements
np.percentile    np.nanpercentile    Compute rank-based statistics of elements
np.any    N/A    Evaluate whether any elements are true
np.all    N/A    Evaluate whether all elements are true
np.power 冪運算
np.sum 和 np.nansum 的區別 nan not a number

操作文件
使用pandas打開文件president_heights.csv 獲取文件中的數據

06-ndarray的矩陣操作

  1. 基本矩陣操作

  2. 1) 算術運算符:
    加減乘除
a = np.array([[1,2,3],
[4,5,6]])
a
輸出:
array([[1, 2, 3],
       [4, 5, 6]])
a+1
輸出:
array([[2, 3, 4],
       [5, 6, 7]])
a*2
輸出:
array([[ 2,  4,  6],
       [ 8, 10, 12]])


a+[[1,4,9],[3,3,3]]
輸出:
array([[ 2,  6, 12],
       [ 7,  8,  9]])


a*2-2
輸出:
array([[ 0,  2,  4],
       [ 6,  8, 10]])

2) 矩陣積np.dot()

a = np.array([[1,2,3],
[4,5,6]])
a
輸出:
array([[1, 2, 3],
       [4, 5, 6]])

b = np.array([[1,1],
[1,1],
[1,1]])
b

輸出:
array([[1, 1],
       [1, 1],
       [1, 1]])

np.dot(a,b)
輸出:
array([[ 6,  6],
       [15, 15]])
  1. 廣播機制
    【重要】ndarray廣播機制的兩條規則
    規則一:爲缺失的維度補1
    規則二:假定缺失元素用已有值填充

07-ndarray的排序

小測驗: 使用以上所學numpy的知識,對一個ndarray對象進行選擇排序。 def selectSort(x): 代碼越短越好
1. 快速排序

np.sort()與ndarray.sort()都可以,但有區別:
- np.sort()不改變輸入
- ndarray.sort()本地處理,不佔用空間,但改變輸入

2. 部分排序

np.partition(a,k)
有的時候我們不是對全部數據感興趣,我們可能只對最小或最大的一部分感興趣。
- 當k爲正時,我們想要得到最小的k個數
- 當k爲負時,我們想要得到最大的k個數

發佈了48 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章