python數據分析與展現(一)

NumPy庫學習python

一.數據的維度程序員

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

  • 一維數據:由對等關係的有序或無序數據構成,採用線性方式組織。例如列表和數組,這二者的區別是列表的數據類型能夠不一樣,數組的數據類型必須相同。
  • 二維數據:由多個一維數據構成,是一維數據的組合形式。例如表格是典型的二位數據。
  • 多維數據:由一維或二維數據在新維度上擴展造成
  • 高維數據:僅利用最基本的二元關係展現數據間的複雜結構。例如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的多維數組對象:ndarrayapp

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二元函數

 

例子:

相關文章
相關標籤/搜索