數據分析:Numpy

numpy創建數組

在這裏插入圖片描述

import numpy as np


# 1). 創建數組: a, b, c創建的數組相同, 任選一種;
a = np.array([1, 2, 3, 4, 5])
b = np.array(range(1, 6))
c = np.arange(1, 6)

print(a, b, c)
#
# # 2). 查看numpy創建的數組類型
print(type(a))
print(type(b))
print(type(c))

#
# 3). 查看數組存儲的數據類型, 常見的數據類型還有哪些?
print(a.dtype)   # 爲什麼是int64? 因爲硬件架構是64位;


# 4). 制定創建的數組的數據類型
d = np.array([1.9, 0, 1.3, 0], dtype=float)
print(d, d.dtype)
#
# 5). 修改數組的數據類型
e = d.astype('int64')   # 裏面可以是數據類型, 也可以是數據代碼;int64---i1
print(e, e.dtype)

# 6). 修改浮點數的小數點位數
# 隨機創建一個三行四列的數組;
f = np.random.random((3, 4))
print(f)

# 修改浮點書的小數位數爲3位
g = np.round(f, 3)
print(g)

矩陣的轉置

在這裏插入圖片描述

import numpy as np

data = np.random.random((3, 4))

# 轉換數據結構 # 2,6
data = data.reshape((2, 6))

print(data)
print("轉置: ", data.T)
print("轉置: ", data.transpose())
print("轉置: ", data.swapaxes(1, 0))

numpy的索引和切片

在這裏插入圖片描述

import numpy as np
a = np.arange(12).reshape((3, 4))

print(a)

# *****************取單行或者單列*********************
# 取第2行;
print(a[1])
# 取第3列;
print(a[:, 2])
# 獲取第2行3列的數據
print(a[1, 2])



# *****************取連續行或者列*********************
# 取第2行和第3行;
print(a[1:3])

# 取第3列和第4列
print(a[:, 2:4])

# 行: 1和2   列: 2
print(a[0:2, 1:2])



# *****************取不連續的行或者列*********************
# 行: 1和3   列: all 獲取第一行和第三行的所有元素
print(a[[0, 2], :])
# 行: all   列: 1, 4
print(a[:, [0, 3]])
# 行: 1 , 3   列: 1 4  獲取第一行第一列的元素, 和第三行第4列的元素
print("*"*10)
print(a[[0, 2], [0, 3]])

numpy中數值的修改

在這裏插入圖片描述

import numpy as np

# 執行行和指定列的修改
t = np.arange(24).reshape((4, 6))
print(t)
#行: all, 列: 3,4
t[:, 2:4] = 0
print(t)

# 布爾索引
print(t < 10)
#
t[t < 10] = 100
print(t)

t[t > 20] = 200
print(t)


# numpy的三元運算符 t<100?0:10
t1  = np.where(t < 100, 0, 10)
print(t)
print(t1)

花式索引

"""
花式索引
    花式索引指的是利用整數數組進行索引。

    花式索引根據索引數組的值作爲目標數組的某個軸的下標來取值。對於使用一維整型數組作爲索引,如果目標是一維數組,那麼索引的結果就是對應位置的元素;
    如果目標是二維數組,那麼就是對應下標的行。

    花式索引跟切片不一樣,它總是將數據複製到新數組中。
"""

import numpy as np
# 傳入順序索引數組
x = np.arange(32).reshape((8, 4))
print(x)
print(x[[4, 2, 1, 7]])

# 傳入倒序索引數組
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]])

# 傳入多個索引數組(要使用np.ix_)
"""
原理:np.ix_函數就是輸入兩個數組,產生笛卡爾積的映射關係
將數組[1,5,7,2]和數組[0,3,1,2]產生笛卡爾積,就是得到
(1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);
"""
x=np.arange(32).reshape((8,4))
print(x)
print (x[np.ix_([1,5,7,2],[0,3,1,2])])

數組形狀修改

在這裏插入圖片描述
在這裏插入圖片描述

"""
    reshape	不改變數據的條件下修改形狀
         numpy.reshape(arr, newshape, order='C')
         order:'C' -- 按行,'F' -- 按列,'A' -- 原順序,'k' -- 元素在內存中的出現順序。
    flat	數組元素迭代器

    flatten	返回一份數組拷貝,對拷貝所做的修改不會影響原始數組
    ravel	返回展開數組
"""

import numpy as np

print("****************************************flat********************************")
a = np.arange(9).reshape(3, 3)
print('原始數組:')
for row in a:
    print(row)

# 對數組中每個元素都進行處理,可以使用flat屬性,該屬性是一個數組元素迭代器:
print('迭代後的數組:')
for element in a.flat:
    print(element)

#
print("*********************************flatten**************************************")
a = np.arange(8).reshape(2, 4)

print('原數組:')
print(a)
print('\n')
# 默認按行

print('展開的數組:')
print(a.flatten())
print('\n')

print('以 F 風格順序展開的數組:')
print(a.flatten(order='F'))


print("*********************************ravel*************************************")
a = np.arange(8).reshape(2, 4)

print('原數組:')
print(a)
print('\n')

print('調用 ravel 函數之後:')
print(a.ravel())
print('\n')

print('以 F 風格順序調用 ravel 函數之後:')
print(a.ravel(order='F'))

數組拼接,分割

"""
concatenate	連接沿現有軸的數組序列
stack	沿着新的軸加入一系列數組。
hstack	水平堆疊序列中的數組(列方向)
vstack	豎直堆疊序列中的數組(行方向)

"""

import numpy as np


print("******************** concatenate ****************")
a = np.array([[1, 2], [3, 4]])
print('第一個數組:')
print(a)
print('\n')

b = np.array([[5, 6], [7, 8]])
print('第二個數組:')
print(b)
print('\n')

# 兩個數組的維度相同
# x軸和y軸, 1軸和0軸
print('沿軸 0 連接兩個數組:')
print(np.concatenate((a, b)))
print('\n')

print('沿軸 1 連接兩個數組:')
print(np.concatenate((a, b), axis=1))




print("*************************stack*********************************")
a = np.array([[1, 2], [3, 4]])

print('第一個數組:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])

print('第二個數組:')
print(b)
print('\n')

print('沿軸 0 堆疊兩個數組:')
print(np.stack((a, b), axis=0))
print('\n')

print('沿軸 1 堆疊兩個數組:')
print(np.stack((a, b), axis=1))

print("**************************************hstack + vstack*************************************")
a = np.array([[1, 2], [3, 4]])

print('第一個數組:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])

print('第二個數組:')
print(b)
print('\n')

print('水平堆疊:')
c = np.hstack((a, b))
print(c)
print('\n')


print('豎直堆疊:')
c = np.vstack((a, b))
print(c)
print('\n')
"""
    split	將一個數組分割爲多個子數組
        numpy.split(ary, indices_or_sections, axis)
    hsplit	將一個數組水平分割爲多個子數組(按列)
    vsplit 	將一個數組垂直分割爲多個子數組(按行)
"""

import numpy as np


print("**********************split******************************")
a = np.arange(9)
print('第一個數組:')
print(a)
print('\n')

print('將數組分爲三個大小相等的子數組:')
b = np.split(a, 3)
print(b)
print('\n')

print('將數組在一維數組中表明的位置分割:')
b = np.split(a, [3, 7])
print(b)



print('******************hsplit*****************')
harr = np.arange(12).reshape((3, 4))
print('原array:')
print(harr)

print('橫向拆分後:')
print(np.hsplit(harr, 2))



print("***************************vsplit****************************")

a = np.arange(12).reshape(4, 3)

print('第一個數組:')
print(a)
print('\n')

print('豎直分割:')
b = np.vsplit(a, 2)
print(b)

數組元素的添加與刪除

"""
    resize	返回指定形狀的新數組
    append	將值添加到數組末尾
    insert	沿指定軸將值插入到指定下標之前
    delete	刪掉某個軸的子數組,並返回刪除後的新數組
    unique 	查找數組內的唯一元素
            arr:輸入數組,如果不是一維數組則會展開
            return_index:如果爲true,返回新列表元素在舊列表中的位置(下標),並以列表形式儲
            return_counts:如果爲true,返回去重數組中的元素在原數組中的出現次數

"""
import numpy as np

print('***************append****************')
a = np.array([[1, 2, 3], [4, 5, 6]])

print('第一個數組:')
print(a)
print('\n')

print('向數組添加元素:')
print(np.append(a, [7, 8, 9]))
print('\n')

print('沿軸 0 添加元素:')
print(np.append(a, [[7, 8, 9]], axis=0))
print('\n')

print('沿軸 1 添加元素:')
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))

print('******************************insert****************************************')
a = np.array([[1, 2], [3, 4], [5, 6]])

print('第一個數組:')
print(a)
print('\n')

print('未傳遞 Axis 參數。 在插入之前輸入數組會被展開。')
print(np.insert(a, 3, [11, 12]))
print('\n')

print('傳遞了 Axis 參數。 會廣播值數組來配輸入數組。')
print('沿軸 0 廣播:')
print(np.insert(a, 1, [11], axis=0))
print('\n')

print('沿軸 1 廣播:')
print(np.insert(a, 1, 11, axis=1))

print('***********************delete******************************************')
a = np.arange(12).reshape(3, 4)

print('第一個數組:')
print(a)
print('\n')

print('未傳遞 Axis 參數。 在插入之前輸入數組會被展開。')
print(np.delete(a, 5))
print('\n')

print('刪除第二列:')   # axis=1, 水平方向, 將每一行的第1個索引元素刪除;
print(np.delete(a, 1, axis=1))
print('\n')

print('刪除第二行:')     # axis=0, 豎直方向, 將每一列的第第一個索引刪除'
print(np.delete(a, 1, axis=0))
print('\n')

print('包含從數組中刪除的替代值的切片:')
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
"""
np.s_ 爲陣列建立索引元組的一種更好的方法。 返回的時slice對象;
也可以使用`Slice()‘加上一些特殊的對象來完成所有這些操作但這個版本更簡單,因爲它使用了標準的數組索引語法。
"""
print(np.delete(a, np.s_[::2]))


print("刪除二維數組")
data = np.arange(12).reshape((3, 4))
print("數組元素:")
print(data)
# 行:  列: 2列開始
print(np.delete(data, np.s_[::2], axis=0))
print(np.delete(data, np.s_[::2], axis=1))


#
#
# print('****************************unique**********************************************')
#
# a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
# #
# print('第一個數組:')
# print(a)
# print('\n')
#
# print('第一個數組的去重值:')
# u = np.unique(a)
# print(u)
# print('\n')
#
# print('去重數組的索引數組:')
# u, indices = np.unique(a, return_index=True)
# print(indices)
# print('\n')
#
# print('返回去重元素的重複數量:')
# u, indices = np.unique(a, return_counts=True)
# print(u)
# print(indices)

numpy的統計函數

numpy.amin() 用於計算數組中的元素沿指定軸的最小值。
numpy.amax() 用於計算數組中的元素沿指定軸的最大值。
numpy.ptp()函數計算數組中元素最大值與最小值的差(最大值 - 最小值)。
numpy.percentile() 百分位數是統計中使用的度量,表示小於這個值的觀察值的百分比。
numpy.median() 函數用於計算數組 a 中元素的中位數(中值)
numpy.mean() 函數返回數組中元素的算術平均值。 如果提供了軸,則沿其計算。
numpy.average() 函數根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值。   average()
np.std()    標準差是一組數據平均值分散程度的一種度量。
    標準差公式如下:std = sqrt(mean((x - x.mean())**2))
np.var()    統計中的方差(樣本方差)是每個樣本值與全體樣本值的平均數之差的平方值的平均數,即 mean((x - x.mean())** 2)。
     標準差是方差的平方根。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章