numpy矩陣
numpy:計算模塊;主要有兩種資料型別:陣列和矩陣
特點:運算快
[]+[]
1、numpy創建矩陣
import numpy as np
mat1 = np.mat('1 2 3;2 3 4;1 2 2')
mat1
print(type(mat1))
<class 'numpy.matrixlib.defmatrix.matrix'>
mat2 = np.mat('1 3;4 7;2 4')
mat2
matrix([[1, 3],
[4, 7],
[2, 4]])
2、矩陣的計算
mat3 = np.mat('1 4 3;2 3 3;1 2 6')
print('矩陣加法運算:\n',mat1+mat3)
矩陣加法運算:
[[2 6 6]
[4 6 7]
[2 4 8]]
print('矩陣的乘法: \n',mat1*mat2)
矩陣的乘法:
[[15 29]
[22 43]
[13 25]]
print('矩陣的轉置:\n',mat1.T)
矩陣的轉置:
[[1 2 1]
[2 3 2]
[3 4 2]]
mat4 = np.mat('1 2 3;2 4 3;1 0 1')
print('逆矩陣: \n',mat4.I)
逆矩陣:
[[-0.66666667 0.33333333 1. ]
[-0.16666667 0.33333333 -0.5 ]
[ 0.66666667 -0.33333333 0. ]]
print('矩陣的數乘: \n',4*mat4)
矩陣的數乘:
[[ 4 8 12]
[ 8 16 12]
[ 4 0 4]]
print('對應元素相乘的運算: \n',np.multiply(mat1,mat3))
對應元素相乘的運算:
[[ 1 8 9]
[ 4 9 12]
[ 1 4 12]]
二、矩陣屬性
print('矩陣的結構: \n',mat1.shape) # 幾乘幾的矩陣
矩陣的結構:
(3, 3)
print('矩陣的元素個數: \n',mat1.size) # 矩陣的元素的個數
矩陣的元素個數:
9
print('矩陣的元素型別: \n',mat1.dtype) # 矩陣的元素的型別
矩陣的元素型別:
int32
print('矩陣的維度: \n',mat1.ndim) # 矩陣的維度
矩陣的維度:
2
三、陣列的創建
- 陣列的所有運算都是對應元素的運算;
arr1 = np.array([1,2,3,4])
print(arr1) # [1 2 3 4]
print(type(arr1)) # <class 'numpy.ndarray'>
[1 2 3 4]
<class 'numpy.ndarray'>
#二維的陣列
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr2) # [[1 2 3]
# [4 5 6]
# [7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]
# 創建列向量型別的陣列
arr3 = np.array([[1],[2],[3],[4]])
print(arr3)
#[[1]
#[2]
# [3]
# [4]]
#
[[1]
[2]
[3]
[4]]
2.陣列的屬性
print('一維陣列的結構: ',arr1.shape) # 一維陣列的結構: (4,)
print('二維陣列的結構: \n',arr2.shape) # 二維陣列的結構: (3, 3)
一維陣列的結構: (4,)
二維陣列的結構:
(3, 3)
print('一維陣列元素的個數: ',arr1.size) # 一維陣列元素的個數: 4
print('二維陣列元素的個數: ',arr2.size) # 二維陣列元素的個數: 9
一維陣列元素的個數: 4
二維陣列元素的個數: 9
print('一維陣列元素的型別:',arr1.dtype) # 一維陣列元素的型別: int32
print('二維陣列元素的型別:',arr2.dtype) # 二維陣列元素的型別: int32
一維陣列元素的型別: int32
二維陣列元素的型別: int32
print('一維陣列元素的維度:',arr1.ndim) # 一維陣列元素的維度: 1
print('二維陣列元素的維度:',arr2.ndim) # 二維陣列元素的維度: 2
一維陣列元素的維度: 1
二維陣列元素的維度: 2
3.陣列的索引
# 一維陣列的索引和切片:和python的串列和字串一樣
arr1[::-1] #
array([4, 3, 2, 1])
# 二維陣列的切片: 陣列名[行切片,列切片]
print(arr2)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
arr2[1,2] # 6
arr2[1,0:2] # array([4, 5])
arr2[::2,::2] # array([[1, 3],
# [7, 9]])
arr2[1:,1:] # array([[5, 6],
# [8, 9]])
arr2[:2,::2] #array([[1, 3],
# [4, 6]])
[[1 2 3]
[4 5 6]
[7 8 9]]
array([[1, 3],
[4, 6]])
# 針對取出不同列不同行的元素 元組內對應坐標
# 取出陣列中的1 ,5,9
arr2[(0,1,2),(0,1,2)]
# 取出2,4,6
arr2[(0,1,1),(1,0,2)]
# 取出3,5,7
arr2[(0,1,2),(2,1,0)]
array([3, 5, 7])
# bool取值 如果一個傳入為行列取值,兩個都傳入代表元組取值
mask = np.array([1,0,1],dtype=np.bool)
print(mask)
[ True False True]
arr2[mask,:2] # true代表切,false代表不切
# array([[1, 2],
# [7, 8]])
# arr2[mask,mask] # array([1, 9])
array([[1, 2],
[7, 8]])
4.特殊函式創建陣列
#(1) 類似于range
arr6 = np.arange(1,10,1)
print(arr6)
[1 2 3 4 5 6 7 8 9]
#(2) 等引數列:
# np.linspace(start=a1,stop=an,endpoint=True,retstep=False,dtype=None,=0) 第一項,最后一項,之間有幾個數
# 引數說明
# endpoint = True:表示等引數列,在start與stop之間插入n-2個值:(n為數值的個數)
# endpoint = False:表示等引數列,在start和stop之間插入n-1個值,表示平均分成n份(n為數值的個數)
File "<ipython-input-28-6d811962123c>", line 4
endpoint = True:表示等引數列,在start與stop之間插入n-2個值:(n為數值的個數)
^
SyntaxError: invalid syntax
arr7 = np.linspace(2,5,5)
print(arr7)
# a1=8 d = -1 n = 7
arr8 = np.linspace(8,2,7)
print(arr8) # [ 8. 7. 6. 5. 4. 3. 2.]
#(3)等比數列
arr9 = np.logspace(1,5,5)
print(arr9)
# a1 = 2 , q = 2 , n= 10
arr10 = np.logspace(1,10,10,base=2)
print(arr10)
# a1 = 3 , q = 9 , n=6
arr10 =np.logspace(1,11,6,base=3)
print(arr10)
import math
# a1 = 2 q = 3 n = 5
arr11 = np.logspace(1,math.log2(162),5,base=2)
print(arr11)
# (4) 全一陣列 ones
a1 = np.ones((2,3))
print(a1)
# (5)全零陣列 zeros
a2 = np.zeros((3,3))
print(a2)
# (6)單位陣列 eye
arr13 = np.eye(3)
print(arr13)
# (7)對角陣列 diag
arr12 = np.diag([1,2,3,4])
print(arr12)
5.創建隨機陣列
# (1)創建n個0-1之間的一維隨機陣列
arr14 = np.random.random(10) # 創建的是10個0-1之間的一維的隨機陣列
print(arr14)
# (2)創建服從均勻分布的隨機陣列
arr15 = np.random.rand(100)
print(arr15)
import matplotlib.pyplot as plt
plt.figure()
plt.hist(arr15,10)
plt.show()
# (3)創建正態分布陣列的亂數
arr16 = np.random.randn(10000)
plt.hist(arr16,10)
plt.show()
# (4)隨機整數的生成 low <= x < high
# size可以是一個數,也可以是元組,(行,列)
np.random.randint(2,4,size=4).reshape((2,2))
np.random.randint(1,6,size=(3,9))
6.矩陣的形態變換
# (1)重置陣列結構(reshape)
arr_1 = np.arange(10)
print(arr_1)
arr_2 =arr_1.reshape((2,5))
print(arr_2)
# (2)展平陣列(ravel):二維-->一維 橫向展平
arr_2.ravel()
# (3)展平陣列(flatten) 默認為C 代表橫向展平 F代表縱向展平
arr_2.flatten('C') # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr_2.flatten('F') # array([0, 5, 1, 6, 2, 7, 3, 8, 4, 9])
# (4)堆疊方法
arr_3 = np.zeros((3,4))
arr_4 = np.ones((3,4))
# 橫向堆疊(hstack(tup)) 要求行數一致
arr_5 = np.hstack((arr_3,arr_4))
print(arr_5)
# 縱向堆疊(vstack(tup)) 要求列數一致
arr_6 = np.vstack((arr_3,arr_4))
print(arr_6)
# (5)陣列合并 concatenate((a1, a2, ...), axis=0)
# 引數詳情(a1,a2,a3,....)
# axis 哪個方向進行合并,默認為axis=0 縱向拼接 axis = 1 為橫向拼接
arr_7 = np.concatenate((arr_3,arr_4),axis=1)
print(arr_7)
vstack,hstack和concatenate的區別
當陣列為二維陣列時,沒有區別,當陣列為一維陣列時,它沒有axis=1的軸,只有axis=0軸,vstack和hstack不會考慮維度的影響,只要符合條件,就能堆疊,vstack可以改變陣列的維度,而concatenate要考慮維度的問題.
ar_1 = np.array([1,2,3,4])
ar_2 = np.array([1,2,3,4])
ar_3 = np.vstack((ar_1,ar_2))
print(ar_3)
# (6) 陣列的分割 hsplit橫向分割 vsplit縱向分割
# hsplit
arr_8 = np.hsplit(arr_7,4)
print(arr_8)
arr_9 = np.hsplit(arr_7,[4,6,7]) # 將陣列按照列的索引分割成(元素個數+1)個陣列
print(arr_9)
# vsplit
arr_10 = np.vsplit(arr_6,[1,3])
print(arr_10)
split(ary, indices_or_sections, axis=0)
引數說明
ary: m要切分的陣列
indices_or_sections: 切分的要求
axis 切分的方向
注意: 使用的要求和concatenate是一樣的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/242887.html
標籤:python
上一篇:String Utils 工具類介紹大全 isAnyEmpty isAnyBlank stripToNull 等,一篇文章找全所有答案!
