numpy的基础使用
@
import numpy as np
numpy的属性
array = np.array([
[1,2,3],
[2,3,4]
])
print(array)
[[1 2 3]
[2 3 4]]
print('number of dim:',array.ndim) # 维度
# number of dim: 2
print('shape :',array.shape) # 行数和列数
# shape : (2, 3)
print('size:',array.size) # 元素个数
# size: 6
number of dim: 2
shape : (2, 3)
size: 6
numpy创建array
指定类型
a = np.array([2,23,4]) # list 1d
print(a)
[ 2 23 4]
a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
int32
a = np.array([2,23,4],dtype=np.int64)
print(a.dtype)
int64
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
float64
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
float32
创建特定数据
a = np.array([[2,23,4],[2,32,4]]) # 2d 矩阵 2行3列
print(a)
[[ 2 23 4]
[ 2 32 4]]
a = np.zeros((3,4)) # 数据全为0,3行4列
print(a)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列
print(a)
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
a = np.empty((3,4)) # 数据为empty,3行4列
print(a)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
a = np.arange(10,20,2) # 10-19 的数据,2步长
print(a)
[10 12 14 16 18]
a = np.arange(12).reshape((3,4)) # 3行4列,0到11
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
a = np.linspace(1,10,6) # 开始端1,结束端10,且分割成5个数据,生成线段
print(a)
[ 1. 2.8 4.6 6.4 8.2 10. ]
a = np.linspace(1,10,6).reshape((3,2)) # 更改shape
print(a)
[[ 1. 2.8]
[ 4.6 6.4]
[ 8.2 10. ]]
基础运算
数值运算
对每个元素进行运算
a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
b=np.arange(4) # array([0, 1, 2, 3])
print(a)
print(b)
[10 20 30 40]
[0 1 2 3]
c=a-b # array([10, 19, 28, 37])
print(c)
[10 19 28 37]
c=a+b # array([10, 21, 32, 43])
print(c)
[10 21 32 43]
c=a*b # array([ 0, 20, 60, 120])
print(c)
[ 0 20 60 120]
c=b**2 # array([0, 1, 4, 9])
print(c)
[0 1 4 9]
c=10*np.sin(a) # array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
print(c)
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]
c= b<3# array([ True, True, True, False], dtype=bool)
print(c)
[ True True True False]
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
# array([[1, 1],
# [0, 1]])
print(b)
# array([[0, 1],
# [2, 3]])
[[1 1]
[0 1]]
[[0 1]
[2 3]]
统计
a=np.random.random((2,4))
print(a)
[[0.7314059 0.49061617 0.60155288 0.27811791]
[0.55631304 0.33982637 0.40576481 0.86569035]]
求和、最小值、最大值
print(np.sum(a))
print(np.min(a))
print(np.max(a))
2.49447115580787
0.002187250626131787
0.9493414655907044
print("sum =",np.sum(a,axis=1)) #对行进行运算
print("min =",np.min(a,axis=0)) #对列进行运算
print("max =",np.max(a,axis=1)) #对行进行运算
sum = [1.47274689 1.02172426]
min = [0.1077961 0.01160856 0.11037722 0.00218725]
max = [0.94934147 0.67224751]
根据统计方法求索引
A = np.arange(2,14).reshape((3,4))
print(A)
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
print(np.argmin(A)) # 0
print(np.argmax(A)) # 11
0
11
平均值、中位数
print(np.mean(A)) # 平均值
print(np.average(A)) # 平均值
print(A.mean()) # 平均值
print(np.median(A)) # 中位数
7.5
7.5
7.5
7.5
累加
结果的第n个数是前n个数相加
print(A)
print(np.cumsum(A))
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[ 2 5 9 14 20 27 35 44 54 65 77 90]
累差运算
后一个减去前一个
print(A)
print(np.diff(A))
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[[1 1 1]
[1 1 1]
[1 1 1]]
返回数组中非零元素的索引值数组
print(np.nonzero(A))
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
排序
import numpy as np
A = np.arange(14,2, -1).reshape((3,4))
print(A)
print(np.sort(A)) #每一行进行排序
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
矩阵运算
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
print(b)
[[1 1]
[0 1]]
[[0 1]
[2 3]]
矩阵的乘法
c_dot = np.dot(a,b)
print(c_dot)
[[2 4]
[2 3]]
c_dot_2 = a.dot(b)
print(c_dot_2)
[[2 4]
[2 3]]
矩阵的转置
print('原矩阵')
print(A)
print('写法一')
print(np.transpose(A))
print('写法二')
print(A.T)#第二种写法
原矩阵
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
写法一
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
写法二
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
切割
clip()函数,裁切,将小于和大于设定值的数改成设定值
print(A)
print(np.clip(A,5,9))
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[9 9 9 9]
[9 9 8 7]
[6 5 5 5]]
索引
一维索引
A = np.arange(3,15)
print(A)
print(A[3]) # 6
[ 3 4 5 6 7 8 9 10 11 12 13 14]
6
A = np.arange(3,15).reshape((3,4))
print(A)
print(A[2])
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
二维索引
print(A[1][1]) # 8
print(A[1,1]) # 8
8
8
print(A[1, 1:3]) # [8 9]
[8 9]
对行遍历
for row in A:
print(row)
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
对列遍历
for row in A.T:
print(row)
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
迭代输出
这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。
A = np.arange(3,15).reshape((3,4))
print(A.flatten())
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
for item in A.flat:
print(item ,end=" ")
[ 3 4 5 6 7 8 9 10 11 12 13 14]
3 4 5 6 7 8 9 10 11 12 13 14
Array的合并
A = np.array([1,1,1])
B = np.array([2,2,2])
C = np.vstack((A,B)) #vertical stack
print(C)
D = np.hstack((A,B)) # horizontal stack
print(D)
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
print(A[np.newaxis,:])
print(A[:,np.newaxis])
[[1 1 1]]
[[1]
[1]
[1]]
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
C = np.concatenate((A,B,B,A),axis=0)
print(C)
D = np.concatenate((A,B,B,A),axis=1)
print(D)
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
array的分割
A = np.arange(12).reshape((3, 4))
print(A)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
等量分割
#分成两列
print(np.split(A, 2, axis=1))
#分成三行
print(np.split(A, 3, axis=0))
a,b,c =np.split(A, 3, axis=0)
print(a,b,c ,sep="\n")
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[[0 1 2 3]]
[[4 5 6 7]]
[[ 8 9 10 11]]
不等量的分割
错误的分割
print(np.split(A, 3, axis=1))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\anaconda3\lib\site-packages\numpy\lib\shape_base.py in split(ary, indices_or_sections, axis)
864 try:
--> 865 len(indices_or_sections)
866 except TypeError:
TypeError: object of type 'int' has no len()
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-50-d557c50bd89b> in <module>
----> 1 print(np.split(A, 3, axis=1))
<__array_function__ internals> in split(*args, **kwargs)
~\anaconda3\lib\site-packages\numpy\lib\shape_base.py in split(ary, indices_or_sections, axis)
869 if N % sections:
870 raise ValueError(
--> 871 'array split does not result in an equal division')
872 return array_split(ary, indices_or_sections, axis)
873
ValueError: array split does not result in an equal division
不等量分割正确的开启方式
print(A)
print(np.array_split(A, 3, axis=1))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
其他的分割方式
print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))
print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
Numpy copy & deep copy
a = np.arange(4)
b = a
print(a)
a[0] = 11
print(a)
print(b)
[0 1 2 3]
[11 1 2 3]
[11 1 2 3]
b = a.copy()
print(b)
a[0] = 100
print(a)
print(b)
[11 1 2 3]
[100 1 2 3]
[11 1 2 3]

浙公网安备 33010602011771号