python數據分析與展示(一)


NumPy庫學習

一.數據的維度

數據的維度是數據的組織形式。

  • 一維數據:由對等關系的有序或無序數據構成,采用線性方式組織。例如列表和數組,這兩者的區別是列表的數據類型可以不同,數組的數據類型必須相同。
  • 二維數據:由多個一維數據構成,是一維數據的組合形式。例如表格是典型的二位數據。
  • 多維數據:由一維或二維數據在新維度上擴展形成
  • 高維數據:僅利用最基本的二元關系展示數據間的復雜結構。例如json、yaml格式的數據。

二.數據維度的python表示

#一維數據:列表和集合類型
[1,2,3] #有序
{1,2,3} #無序

#二維數據:列表類型
[[1,2,3],
 [4,5,6]]

#多維數據
[[[1,2,3],
  [4,5,6]],
 [7,8,9],
 [4,4,4]]

#高維數據:字典類型或數據表示格式,例如JSON、XML、YAML
dict={
        'firstName':'Tian',
        'lastName':'Song',
    }

 三.NumPy的多維數組對象:ndarray

1.NumPy是一個開源的python科學計算基礎庫,包含

  • 一個強大的N維數組對象:ndarray
  • 廣播功能函數
  • 整合C/C++/Fortran代碼的工具
  • 線性代數,傅里葉變換、隨機數生成等功能

NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎

2.NumPy的引用:

import numpy as np

#這是一種約定俗成的引用名稱,建議使用上述約定的別名

3.python已經有列表類型,為什么需要一個數組對象?

  • 數組對象可以去除元素運算所需的循環,使一維向量更像單個數據
  • 設置專門的數組對象,經過優化,可以提升這類應用的運算速度
  • 數組對象采用相同的數據類型,有助於節省運算和存儲空間

例如以下事例:

#計算A^2+B^2,其中A和B是一維數組
import numpy as np
#使用列表的方式
def pySum():
    a=[0,1,2,3,4]
    b=[5,6,7,8,9]
    c=[]
    for i in range(len(a)):
        c.append(a[i]**2+b[i]**2)
    return c
print("pySum-->",pySum())

#使用數組的方式
def npSum():
    a=np.array([0,1,2,3,4])
    b=np.array([5,6,7,8,9])
    c=a**2+b**2
    return c
print("npSum-->",npSum())

#運行結果
'''
pySum--> [25, 37, 53, 73, 97]
npSum--> [25 37 53 73 97]
'''
#可見如果采用數組的方式,numy把一維向量當作單個數據對待,這樣更有利於進行科學計算

4.ndarray對象的構成:

  • 實際的數組
  • 描述這些數據的元數據(數據維度、數據類型等)

ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始

ndarry實例:

import numpy as np

#ndarray在程序中的別名是:array
#np.array()生成一個ndarray數組
a=np.array([[0,1,2,3,4],
            [5,6,7,8,9]])

print(a)    #np.array()輸出成[]形式,元素有空格分割

'''
[[0 1 2 3 4]
 [5 6 7 8 9]]
'''
#軸(axis):保存數據的維度;秩(rank):軸的數量

5.ndarray對象的屬性

  • .ndim:秩,即軸的數量或維度的數量
  • .shape:ndarray對象的尺度,對於矩陣的n行m列
  • .size:ndarray對象元素的個數,相當於.shape中的n*m的值
  • .dtype:ndarray對象的元素類型
  • .itemsize:ndarray對象中每個元素的大小,以字節為單位

實例:

import numpy as np

a=np.array([[1,2,3,4],
            [5,6,7,8]])

print("維度:",a.ndim)
print("尺度:",a.shape)
print("元素個數:",a.size)
print("元素的類型:",a.dtype)
print("元素的大小:",a.itemsize)

'''
維度: 2
尺度: (2, 4)
元素個數: 8
元素的類型: int32
元素的大小: 4
'''

6.ndarray的元素類型

ndarrya為什么要支持這么多種元素類型?

  • 科學計算涉及數據較多,對存儲和性能都有較高要求
  • 對元素類型精確定義,有助於NumPy合理使用存儲空間並優化性能
  • 對元素類型精確定義,有助於程序員對程序規模有合理評估

7.非同質的ndarray對象

非同質的ndarray元素為對象類型,無法有效發揮NumPy優勢,盡量避免使用

import numpy as np

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

print("尺度:",a.shape)
print("元素個數:",a.size)
print("元素的類型:",a.dtype)
print("元素的大小:",a.itemsize)

'''
尺度: (2,)
元素個數: 2
元素的類型: object
元素的大小: 8
'''
#此時每個一維向量被當成一個對象(元素)

8.ndarray數組的創建

(1)從python中的列表、元組等類型創建ndarray數組

x=np.array(list/tuple,dtype=np.float32)

#當np.array()不指定dtype時,NumPy將根據情況關聯一個dtype類型

例子:

(2)使用NumPy中函數創建ndarray數組,如:arrange,ones,zeros

#######

注:使用np.arange()方法創建的數組默認是int32類型,另外幾種方法默認是float類型

例子:

 

例子:

例子:

9.ndarray數組的變換

(1)ndarray數組的維度變換

例子:

(2)ndarray數組的類型變換

new_a = a.astype(new_type)

#astype()方法一定會創建新的數組()原始數組的一個拷貝,即使兩個類型一致

例子:

(3)ndarray數組向列表的轉換

ls=a.tolist()

例子:

10.ndarray數組的操作

(1)ndarray數組的索引和切片

一維數組的索引和切片:與python的列表類似

多維數組的索引:

多維數組的切片:

(2)ndarray數組的運算

數組與標量之間的運算作用於數組的每一個元素

(3)NumPy一元函數

例子:

(4)NumPy二元函數

 

例子:

 

 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM