天天看點

python資料分析之Numpy庫Numpy庫基礎

Numpy庫基礎

Numpy介紹

Numpy是一個開源的python科學計算基礎庫。

*一個強大的數組對象ndarray

*廣播功能函數

*整合c/c++/Fortran代碼的工具

*線性代數,傅裡葉變換,随機數生成等功能

Numpy是Scipy,pandas等資料處理或科學計算庫的基礎

基本概念

一.資料的次元

1.一維資料

[1,2,3]

2.二維資料(表格是典型的二維資料)

[[1,2,3],[1,2,3]]

3.多元資料

4.高維資料(這裡的高維資料是利用二進制關系表表達複雜的多元資料)

一.Numpy庫的數組對象ndarray 引用numpy的方法

問題一:為什麼python有了清單,而且可以表達多元資料,我們還要數組類型呢?

import numpy as np

ndarray是一個數組類型的資料。

數組對象可以去掉元素運算所需要的循環,使一維向量更像單個資料

我們舉個例子如下:

import numpy as np
#未使用numpy的情況,計算A的平方+B的平方
def pysum():
    a = [0,1,2,3,4]
    b = [9,8,7,6,5]
    c= []
    for i in range(len(a)):
        c.append(a[i]**2 + b[i]**2)
    return c
print(pysum())
#使用numpy計算A的平方+B的平方
a = np.array([0,1,2,3,4])
b = np.array([9,8,7,6,5])
print(a**2 + b**2)


           

設定專門的數組對象,經過優化,可以提升這類應用的運算速度。(numpy的實作,底層使用C語言,甚至更底層的方法支援運算)

數組對象采用相同的資料類型,有助于節省運算和存儲空間。(科學計算中一個次元的所有資料往往相同)

ndarray是一個多元數組對象,由兩部分組成:

實際的資料

描述這些資料的中繼資料(資料的次元,資料類型等)

ndarray的兩個基本概念

axis(軸):儲存資料的次元

rank(秩):軸的數量

生成一個ndarray數組

屬性 說明
.ndim 秩,即軸的數量或者次元的數量
.shape ndarray對象的尺度,對于矩陣,n行m列
.size ndarray對象元素的個數,相當于.shape中的n*m的值
.dtype ndarray對象的元素類型
.itemsize ndarray對象中每個元素的大小,以位元組為機關

tip:shape[1] 表示第一維資料中分了多少層

建立ndarray數組

x = np.array(list/tuple)
x = np.array(list/tuple,dtype = np.float32)
           
函數 說明
np.arange(n) 類似range()函數,傳回ndarray類型,元素從0到n-1
np.ones(shape) 根據shape生成一個全1數組,shape是元組類型
np.zeros(shape) 根據shape生成一個全0數組,shape是元組類型
np.full(shape,val) 根據shape生成一個數組,每個元素都是val
np.eye(n) 船艦一個正方的n*n機關矩陣,對角線為1,其餘為0

二 .數組的操作

引索和切片

一維數組的引索和切片

import numpy as np
a = np.array([9,8,7,6,5])
print(a[2]) #結果為7

print(a[1:4:2])#1表示開始,,位置4表示結束,位置2表示步長
#結果為[8,6]

           

多元數組的索引和切片

import numpy as np
a = np.arange(24).reshape((2,3,4))#注意reshape的參數要是清單或者元組
#結果輸出如下:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
  
a[1,2,3]#1表示第一個次元,2表示第二個次元,3表示第三個次元
23
a[0,1,2]
6
a[-1,-2,-3]
17
           

多元數組的引索和切片

import numpy as np
a = np.arange(24).reshape((2,3,4))
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
a[:,1:3,:]#表示不管第一次元和第三次元,選取第二次元從下标1到3的元素
[[[4,5,6,7]
  [8,9,10,11]],
 [[16,17,18,19]
  [20,21,22,23]]]
a[:,:,::2]#表示不管第一和第二次元,也不管第三個次元,但是以2為步長來選取元素
[[[0,2]
[4,6]
[8,10]],
[[12,14]
[16,18]
[20,22]]]
           

csv檔案的存取

#一維資料
np.savetxt("qq.csv",array,fmt,delimiter)#fmt格式,delimiter分割字元串
np.savetxt('a.csv',a,fmt = '%d',delimiter = ',')

np.load('a.csv',delimiter = ',')
#多元資料
np.save('a.csv',a)#存
np.laod('a.csv')#讀
           

随機函數

np.random.rand()
np.random.randn()
np.random.randint()
np.random.seed(s)
           

統計函數

np.sum(a)
np.mean(a,axis = 1)
np.average(a,axis = 0,weights = [10,5,1])
np.std(a)
np.var(a)
           

梯度函數

c = np.random.randint(0,50,(3,5))
np.gradient(c)
#後一個元素減去上一個元素然後除以間隔數
#邊上元素用本身減去上個元素除1