二:Numpy数组的形状与重塑
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
// An highlighted block
2.1 查看NumPy数组的维度 array.ndim
input:a = np.array([[5,10,15],[20,25,20]])
print('Array :','\n',a)
print('Dimensions :',a.ndim)
output:Array :
[[ 5 10 15]
[20 25 20]]
Dimensions : 2
2.2 查看NumPy数组的形状 ndarray.shape,ndayyary.shape[0],ndayyary.shape[0]
input:a = np.array([[1,2,3],[4,5,6]])
print('Array :','\n',a)
print('Shape :',a.shape)
print('Rows = ',a.shape[0])
print('Columns = ',a.shape[1])
output:Array :
[[1 2 3]
[4 5 6]]
Shape : (2, 3)
Rows = 2
Columns = 3
2.3 重塑Numpy数组的维度(1维-多维,多维-多维,多维-1维) np.reshape()
#1维-多维(手动设置形状)
input:a = np.array([3,6,9,12])
np.reshape(a,(2,2))
output:[[3 6]
[9 12]]
#1维-多维(自动计算形状),numpy看到-1时会自动计算形状,行和列只有一个可以为-1,另一个需要指定
input:a = np.array([3,6,9,12,15,18])
print('Three rows :',np.reshape(a,(3,-1)))
print('Three columns :',np.reshape(a,(-1,3)))
ouput:Three rows :
[[3 6]
[9 12]
[18 24]]
Three columns :
[[3 6 9]
[12 18 24]]
#多维-1维(展开Numpy数组) 不改变原数组:flatten() 改变原数组:ravel()
input:a=np.zeros((3,3),dtype=np.int32)
b=a.flatten()
c=a.ravel()
print("a:",a)
print("b:",b)
print("c:",c)
b[0]=1
print("a1:",a)
c[0]=1
print("a2:",a)
output:a: [[0 0 0]
[0 0 0]
[0 0 0]]
b: [0 0 0 0 0 0 0 0 0]
c: [0 0 0 0 0 0 0 0 0]
a1: [[0 0 0]
[0 0 0]
[0 0 0]]
a2: [[1 0 0]
[0 0 0]
[0 0 0]]
#多维-多维
input:a1=np.ones((4,4),dtype=np.int32)
a2=a1.reshape((2,8)) #a2=np.reshape(a1,(2,8))
print("a2:",a2)
output:a1: [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
a2: [[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]]
2.4 Numpy数组的转置 np.trasnspose(ndarrary) /ndarrary.transpose()
input:a = a = np.array([[1,2,3],
[4,5,6]])
b = a.transpose()
print('Original shape and arrary:',a.shape,'\n',a)
print(' Original shape and arrary After transpose:',b.shape,'\n',b)
output:Original shape and arrary: (2, 3)
[[1 2 3]
[4 5 6]]
Original shape and arrary After transpose: (3, 2)
[[1 4]
[2 5]
[3 6]]
var foo = 'bar';
三:Numpy数组的索引与切片(一维,二维,三维)
// A code block
var foo = 'bar';
// An highlighted block
**3.1 Numpy数组的切片
3.1.1 一维数组的切片** ndarrary[start:end:step-size] 索引范围:[start,end)
input:a = np.array([1,2,3,4,5,6])
print(a[1:5:2])
print(a[:6:2]) #未指定start时,start默认为0
print(a[1::2]) #未指定end时,end默认为数组大小
print(a[1:6:]) #未指定步长时默认为1
output:[2 4]
[1 3 5]
[2 4 6]
[2 3 4 5 6]
**3.2 二维数组切片
<1>从二维数组中检索元素**
input:a = np.array([[1,2,3],
[4,5,6]])
print(a[0,0]) #等同于print(a[0][0])
print(a[0][0])
print(a[1,2])
print(a[1,0])
output:1
1
6
4
**<2>二维数组切片**
input:a = np.array([[1,2,3],[4,5,6]])
# 打印第一行值
print('第一行的值 :',a[0:1,:])
# 具有列的步长
print('第一行第二列和第一行第三列的值:',a[0:1,::2])
print('Second column values :',a[:,1::2])
print('Arbitrary values :',a[0:1,1:3])
output:第一行的值: [[1 2 3]]
第一行第二列和第一行第三列的值: [[1 3]]
Second column values : [[2] [5]]
Arbitrary values : [[2 3]]
**3.3 三维数组切片**
input:a = np.array([[[1,2],[3,4],[5,6]],# 第一个轴
[[7,8],[9,10],[11,12]],# 第二个轴
[[13,14],[15,16],[17,18]]])# 第三个轴
print(a)
output:[ [[1 2] [3 4] [5 6]]
[[7 8] [9 10] [11 12]]
[[13 14] [15 16] [17 18]]
]
input:print('First array, first row, first column value :','\n',a[0,0,0])
print('First array last column :','\n',a[0,:,1])
print('First two rows for second and third arrays :','\n',a[1:,0:2,0:2])
output:First array, first row, first column value : 1
First array last column : [2 4 6]
First two rows for second and third arrays : [[[7 8]
[9 10]]
[[13 14]
[15 16]]]
**3.4 Numpy数组的负切片**
input:a = np.array([[1,2,3,4,5],
[6,7,8,9,10]])
print(a[:,-1]) #所有行的最后一个数
output:[5 10]
input:print(a[-1::-1,-1::-2]) #倒数第一行--第一行 步长:-1 倒数第一列-第一列 步长:-2
output:[[10 8 6] #第二行-第一行&&(第五列,第三列,第一列)
[5 3 1]]
#利用负切片反转数组 ndarrary.[::-1,::-1]
input:print(a[::-1,::-1])
output:[[10 9 8 7 6]
[5 4 3 2 1]]
#flip(ndarrary,axis=0/1)方法反转数组,axis=0时列反转,axis=1时行反转
input:print("a数组 行 反转:",np.flip(a,axis=1))
print("a数组 列 反转:",np.flip(a,axis=0))
output:a数组 行 反转:[[5 4 3 2 1]
[10 9 8 7 6]]
a数组 列 反转:[[6 7 8 9 10]
[1 2 3 4 5]]
**四:Numpy数组的堆叠和级联(数组的拼接)**
**4.1堆叠Numpy数组** 垂直堆叠:vstack(a,b),即沿行堆叠 水平堆叠:hstack(a,b),即沿列堆叠 按深度堆叠:dstack((a,b)) 注:使用vstack和hstack方法时 a,b两个numpy数组必须有完全相同的轴
input:a = np.arange(1,6)
b = np.arange(6,11)
print('a:','\n',a)
print('b:','\n',b)
print('垂直堆叠,即沿行堆叠:',np.vstack((a,b)))
print('水平堆叠,即沿列堆叠:',np.hstack((a,b)))
a1=[[1,2],[3,4]]
b1=[[5,6],[7,8,]]
print('按深度堆叠:',np.dstack(a1,b1))
output:a:[1 2 3 4 5]
b:[6 7 8 9 10]
垂直堆叠,即沿行堆叠:[ [1 2 3 4 5]
[6 7 8 9 10]
}
水平堆叠,即沿列堆叠:[1 2 3 4 5 6 7 8 9 10]
按深度堆叠:[ [[1 5] [2 6]]
[[3 7] [4 8]] ]
4.2 级联Numpy数组 concatenate((a,b),axis=0/1)
append(a,value,axis=0/1):直接将新元素添加到a数组的末尾
注:使用np.append()方法并不会改变原数组的值,而是在副本上进行添加元素
#np.concatenate((a,b),axis=0/1) axis=0时,按列级联 axis=0时,按行级联
input:a = np.arange(1,6).reshape(1,5)
b = np.arange(6,11).reshape(1,5)
print('a:','\n',a)
print('b:','\n',b)
print('按列级联:','\n',np.concatenate((a,b),axis=0))
print('按行级联:','\n',np.concatenate((a,b),axis=1))
output:a:[[1 2 3 4 5]]
b:[[6 7 8 9 10]]
按列级联:[ [1 2 3 4 5]
[6 7 8 9 10]
]
按行级联:[ [1 2 3 4 5 6 7 8 9 10] ]
#np.append()
input:c = np.array([[1 2]
[3 4]])
c1=np.append(c,[[5,6]], axis=0)
print('c1:',c1,'\n')
print('c:',c)
output:c1: [[1 2]
[3 4]
[5 6]]
c: [[1 2]
[3 4]]
**五:Numpy数组广播**
可在形状不同的numpy数组之间或numpy数组与数字之间的运算.广播基本上延伸较小的numpy数组,使得较小的numpy数组与较大的numpy数组保持相同的形状
注:只在两种情况下可以使用广播 1.两个数组形状相同 2.其中一个是1维
input:a = np.arange(1,11,2) #[1 3 5 7 9]
b = np.array([[2],[2]])
print('a+b=:','\n',a+b)
print('a*2=:',a*2)
output:a+b:[[3 5 7 9 11]
[3 5 7 9 11]]
a*2=[2 6 10 14 18]
六:用Numpy数组计算
6.1 Numpy数组的基本运算 加、减、乘、除、求余
input:a=np.arange(6,11)
print('a=',a)
print('a+5=:',a+5)
print('a-5=:',a-5)
print('a*5=:',a*5)
print('a/5=:',a/5)
print('a*a=:',a**2)
print('a%5=:',a%5)
output:a=[6 7 8 9 10]
a-5=[ 1 2 3 4 5]
a+5=[ 11 12 13 14 15]
a*5=[30 35 40 45 50]
a/5=[1.2 1.4 1.6 1.8 2.]
a*a=[36 79 64 81 100]
a%5=[1 2 3 4 0]
6.2 平均数、中位数、标准差 np.mean() np.std() np.median()
input:a = np.arange(1,11,2)
print('平均数:',np.mean(a))
print('标准差:',np.std(a))
print('中位数:',np.median(a))
output:平均数: 5.0
标准差: 2.8284271247461903
中位数: 5.0
var foo = 'bar';