天天看點

資料分析-numpy學習

今天和大家分享下最近學習的一些numpy知識,這些都是我一個一個手動碼出來的,有興趣的同僚可以一起學習一下。

建立一維資料

建立二維數組

常用屬性

調整數組的形狀

将數組轉換成list形式   

數組和數的計算

三維數組

數組的索引與切片

數組中數值的修改

數組的添加、删除與去重

numpy的計算

數組的拼接

二維數組的轉置

建立一維資料

import numpy as np

list1 = [1,2,3,4]

oneArray = np.array(list1)

print(type(oneArray))

print(oneArray)

#建立數組的形式

#1 直接傳入清單的形式

t1 = np.array([1,2,3])

print(t1)

#2 傳入range生成序列

t2 = np.array(range(100))

print(t2)

#使用numpy自帶的np.arrange()生成數組

t3 = np.arange(0,12,2)

print(t3)

建立二維數組

list2 = [[1,2],[3,4],[5,6]]

twoArray = np.array(list2)

print(twoArray)

常用屬性

#擷取形狀

print(twoArray.shape)

#有多少個元素

print(twoArray.size)

調整數組的形狀

import numpy as np

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

#修改的是原有的

# four.reshape=(6,)

# print(four)

#傳回一個新的數組

five= four.reshape(2,3)

print(five)

#多元數組變成一位數組,預設情況下‘C’是以行為主的順序展開,‘F’是以列為主的順序展開

six = four.reshape((6,),order = 'F')

print(six)

将數組轉換成list形式   

import numpy as np 

a = np.array([3,5,6,8,9,12])

b = a.tolist()

print(b)

print(type(b))

#将數組轉換成list形式

import numpy as np 

a = np.array([3,5,6,8,9,12])

b = a.tolist()

print(b)

print(type(b))

數組和數的計算

import numpy as np

t1 = np.arange(24).reshape(3,8)

print(t1)

print(t1+2)

print(t1*2)

print(t1/2)

#數組與數組之間的操作,注意不同形狀的多元數組不能進行計算

import numpy as np

# t1 = np.arange(24).reshape((4,6))

# t2 = np.arange(100,124).reshape((4,6))

# print(t1)

# print(t2)

# print(t1+t2)

# print(t1*t2)

#行數或者列數相同的一維數組和多元數組可以進行計算

# t1 = np.arange(24).reshape((4,6))

# t2 = np.arange(0,6)

# print(t1)

# print(t2)

# print(t1-t2)

#列形狀相同(會與每一個相同次元的數組的對應位相操作)

t1 = np.arange(24).reshape((4,6))

t2 = np.arange(4).reshape((4,1))

print(t1)

print(t2)

print(t1-t2)

三維數組

import numpy as np

a = np.arange(27).reshape(3,3,3)

print(a)

b = np.sum(a,axis=0)

print(b)

數組的索引與切片

import numpy as np

a = np.arange(10)

#冒号分割切片參數 start:start:stop 來進行切片操作

print(a[2:7:2])

#如果為[2:],表示從該索引往後的所欲項目都會被提取

print(a[2:])

#多元資料的索引

import numpy as np

t1 = np.arange(24).reshape((4,6))

# print(t1)

# print("******")

# print(t1[1])

# print(t1[1:,:])  #去取連續多行

# print(t1[1:3])  #取連續多行

# print(t2[[1,2,3]])  #取不連續的多行

# print(t1[:,2])  #取一列

# print(t1[:,1:])  #取連續多列

# print(t1[2,3]) #取某一個值

# print(t1[[2,3],[2,3]]) #取多個不連續的值

#print(t[2:3])

數組中數值的修改

import numpy as np

t = np.arange(24).reshape(4,6)

print(t)

#修改某一行的值

#t[2,:] = 0

#修改某一列的值

# t[:,3] = 0

# print(t)

#連續修改多行的值

# t[1:3,:] = 0

# print(t)

#修改連續多列的值

# t[:,1:4] = 0 

# print(t)

#修改多行多列的值

# t[1:4,2:3]=0

# print(t)

#修改多個不相鄰的值

# t[[2,3],[1,2]] = 0

# print(t)

#可以根據條件修改,比如講小于10的值改掉

t[t<10] = 0

print(t)

#使用邏輯判斷

# t[(t<2)&(t<6)] = 0  #與

# print(t)

# t[(t<2)|(t>6)] = 0  #或

# print(t)

# t[~(t>6)] = 0  #非

# print(t)

數組的添加、删除與去重

import numpy as np

# a = np.arange(1,7).reshape(2,3)

# print(a)

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

# print(a)

# print('向數組添加元素')

# print(np.append(a,[7,8,9]))  #axis預設為None時,是橫向加成,傳回總是一維數組!

# print('\n')

# print('沿軸0添加元素')

# print(np.append(a,[[7,8,9]],axis = 0))

# print('沿軸1添加元素')

# print(np.append(a,[[5,5,5],[7,7,7]],axis = 1))

#numpy.insert  函數在給定索引之前,沿給定軸在輸入數組中插入值

#如果值的類型轉換為要插入,則它與輸入數組不同,插入沒有原地的,函數會傳回一個新數組。此外,如果未提供軸,則輸入數組會被展開

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

print(a)

print('未傳遞Axis參數,在插入前輸入數組會被展開')

print(np.insert(a,4,[11,12]))

print('\n')

print('傳遞了Axis參數,會廣播值數組來配輸入數組')

print('沿軸0廣播:')

print(np.insert(a,1,[11],axis = 0))

print('沿軸1廣播:')

print(np.insert(a,1,[11],axis = 1))

#數組中的删除

import numpy as np

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

print('未傳遞axis參數,在删除之前數組會被展開')

print(np.delete(a,1))

print('删除每一行中的第二列')

print(a)

print(np.delete(a,1,axis = 1))

#數組去重

#numpy.unique() 函數用于去除數組中的重複元素

'''

arr:輸入一維數組,如果不是一維數組則會被展開

return_index:如果為True,傳回新清單元素則在舊清單中的位置(下标),并以清單形式存儲

return_inserve:如果為true,傳回舊清單元素則在新清單中的位置(下标),并以清單形式存儲

return_counts:如果為true,傳回去重值的元素在原數組中出現的次數

'''

import numpy as np

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

print('第一個數組是:')

print(a)

print('第一個數組的去重值')

u = np.unique(a)

print(u)

# print('去重數組的索引數組:')

# u,indices = np.unique(a,return_index = True)

# print(indices)

print('去重數組的下标')

u,indices = np.unique(a,return_inverse = True)

print(indices)

print('傳回去重元素的重複數量')

u,indices = np.unique(a,return_counts = True)

print(u)

print(indices)

numpy的計算

import numpy as np

score = np.array([[86,88],[89,87],[66,68]])

print(score)

#擷取所有資料的最大值

# result = np.max(score)

# print(result)

#擷取某一軸上的最大值

# result= np.max(score,axis = 1)

# print(result)

#擷取最小值

# result = np.min(score)

# print(result)

#擷取某一軸上的最小值

# result = np.min(score,axis = 0)

# print(result)

#數組的比較

# result = np.maximum([-2,-1,0,1,2],0)  #第一個參數中的每一個值與第二個參數的值作比較傳回最大的值

# print(result)

# result = np.minimum([-2,-2,-1,-3],0)#第一個參數中的每一個值與第二個參數的值作比較傳回最小的值

# print(result)

# result = np.maximum([-2,-3,-1,-4],[-2,-3,-5,8]) #接受的2個參數,也可以大小不一緻

# print(result)

#求平均值

# result = np.mean(score)

# print(result)

#傳回給定axis上的累計和

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

# print(arr)

# print(arr.cumsum(0))

# print(arr.cumsum(1))

#求最小索引值

# result = np.argmin(score,axis = 0)

# print(result)

#求每一列的标準差

# result = np.std(score,axis = 0)

# print(result)

#求極值

result = np.ptp(score)

print(result)

數組的拼接

import numpy as np 

#1、根據軸連接配接的數組序列

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

b = np.array([[6,7],[8,9]])

# #要求次元相同

# print('沿軸0連接配接2個數組')

# print(np.concatenate((a,b),axis = 0))

# print('沿軸1連接配接2個數組')

# print(np.concatenate((a,b),axis = 1))

#2、根據軸進行堆疊

# print('沿軸0連接配接2個數組')

# print(np.stack((a,b),axis = 0))

# print('沿軸1連接配接2個數組')

# print(np.stack((a,b),axis = 1))

#3、矩陣垂直拼接

v1 = np.arange(0,12).reshape(2,6)

v2 = np.arange(12,24).reshape(2,6)

result = np.vstack((v1,v2))

print(result)

#4矩陣水準拼接

result = np.hstack((v1,v2))

print(result)

二維數組的轉置

#對換數組的次元

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

# print('原數組:')

# print(a)

# print('對換數組')

# print(np.transpose(a))

#與transpose一緻

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

print('原數組:')

print(a)

print('\n')

print('轉置數組')

print(a.T)

#函數用于交換數組的2個軸

a = np.arange(24).reshape(4,6)

re = a.swapaxes(1,0)

print(a)

print(re)