0
点赞
收藏
分享

微信扫一扫

Numpy快速入门上手(常用函数总结)

pipu 2022-03-30 阅读 41

numpy常用函数

tip:推荐使用jupyter notebook进行numpy的学习

文章目录

导包

import numpy as np

创建数组

# 创建数组
np.array([1,2,3,4,5])
array([1, 2, 3, 4, 5])

创建全0的数组np.zeros()

# 创建全0的数组
np.zeros((3,2))
# 3行2列
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

获取尺寸shape

a = np.zeros((3,2))
a.shape # 获取数组的尺寸
(3, 2)

创建全为1的数组np.ones()

np.ones((2,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])

创建递增或递减的数列np.arange()

np.arange(3,7)
array([3, 4, 5, 6])

创建等间距数组np.linspace()

# 返回介于某个区间,等间距分布的数 
# 前两个参数是输出范围,第三个参数是样本的总数
np.linspace(0,1,5)
array([0.  , 0.25, 0.5 , 0.75, 1.  ])

随机数组np.random.rand()

# 生成随机数组
np.random.rand(2,4)
array([[0.68604587, 0.44553674, 0.48468352, 0.38850138],
       [0.42703367, 0.02678288, 0.75816718, 0.43497204]])

数据类型dtype

# 在numpy中,数组默认的数据类型是64位的浮点数
a = np.zeros((4,2))
a.dtype
dtype('float64')

创建时指定类型

# 制定数据类型
np.zeros((4,2),dtype=np.int32)
array([[0, 0],
       [0, 0],
       [0, 0],
       [0, 0]], dtype=int32)

常用类型:

  • np.int8/16/32/64 整形
  • np.uint8/16/32/64 无符号整型
  • np.float32/64 浮点数
  • bool 布尔值
  • str 字符串

类型转换:

# 对现有数组,可以通过astype()来转换数据类型
a = np.zeros((2,4))
b = a.astype(int)
b
array([[0, 0, 0, 0],
       [0, 0, 0, 0]])

数学运算

加法

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

减法

a - b
array([-3, -3, -3])

对两个向量,进行点乘运算

np.dot(a,b)
32

@会进行矩阵的乘法运算

# @会进行矩阵的乘法运算
a = np.array([[1,2],[3,4]])
b = np.array([[2,0],[0,2]])
a @ b
array([[2, 4],
       [6, 8]])

对所有数依次求平方根

np.sqrt(a)
array([[1.        , 1.41421356],
       [1.73205081, 2.        ]])

三角函数:

a = np.array([[1,2],[3,4]])
np.sin(a)
array([[ 0.84147098,  0.90929743],
       [ 0.14112001, -0.7568025 ]])
np.cos(a)
array([[ 0.54030231, -0.41614684],
       [-0.9899925 , -0.65364362]])
np.log(a)
array([[0.        , 0.69314718],
       [1.09861229, 1.38629436]])

2次方

a = np.array([[1,2],[3,4]])
np.power(a,2)
array([[ 1,  4],
       [ 9, 16]])

广播

# a中每一个数均与5相乘,这个操作叫做 广播
a = np.array([[1,2],[3,4]])
a * 5
array([[ 5, 10],
       [15, 20]])

不同尺寸的数组,也可以进行广播运算

a = np.array([[1],
              [20],
              [30]])
b = np.array([0,1,2])
a + b
array([[ 1,  2,  3],
       [20, 21, 22],
       [30, 31, 32]])

返回数组中最大或者最小元素

a = np.array([1,2,4,5,6])
# 最大
a.max()
6
# 最小
a.min()
1
# 返回最大元素所在的索引,从0开始
a.argmax()
4
# 返回最小元素所在的索引,从0开始
a.argmin()
0

总和/平均/中位数/方差/标准差

返回所有数据的总和

# 返回所有数据的总和
a = np.array([1,2,4,5,6])
a.sum()
18

返回平均数

a = np.array([1,2,4,5,6])
a.mean() # 返回平均数
3.6

返回中位数

a = np.array([1,2,4,5,6])
np.median(a) # 返回中位数
4.0

返回数据的方差

a = np.array([1,2,4,5,6])
a.var() # 返回数据的方差
3.44

返回标准方差

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

按指定维度相加sum(axis=0)

a = np.array([[1,2,3,4,5],
              [5,6,7,8,9]])
a.sum(axis=0) # 0代表第一个维度,也就是“行”,按行相加 
array([ 6,  8, 10, 12, 14])

按列

a.sum(axis=1)
array([15, 35])

索引元素

# 获取制定元素
a = np.array([[1,2,3,4,5],
              [5,6,7,8,9]])
a[0,1] # 获取第一行,第2列
2

创建等差数组np.arange()

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

按条件筛选制定元素

# 按条件筛选制定元素
a = np.arange(10)
a[a<3]
array([0, 1, 2])
# 通过逻辑运算符,组合不同的条件
a[(a>3)&(a%2==0)] # 大于3并且是偶数
array([4, 6, 8])

索引切片(跨度/逆向数组/…)

a = np.array([[1,2,4],
              [4,5,6]])
a[0,0:2] # 类似切片的语法,0:2代表[0,2),不包括2
array([1, 2])
a = np.array([[1,2,4],
              [4,5,6]])
a[0,:] #获取第一行所有元素,可以单写一个:
array([1, 2, 4])
a = np.array([[1,2,4],
              [4,5,6]])
a[0] # 直接省略:
array([1, 2, 4])
a=np.array([1,2,3,4,5,6,7,8,9])
a[0:9:2] # 第二个冒号后面可以跟一个跨度(Stride)
array([1, 3, 5, 7, 9])
a=np.array([1,2,3,4,5,6,7,8,9])
a[8:0:-2] # 这个跨度也可以取负值
array([9, 7, 5, 3])
a=np.array([1,2,3,4,5,6,7,8,9])
a[::-1] # 逆向返回数组
array([9, 8, 7, 6, 5, 4, 3, 2, 1])

拼接np.append()

x = np.array([[1,0,0,1],[1,1,1,1]])
x=np.append(x,[0,0,0,0])
x
array([1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0])
a = np.array([1,2,3,4,5,6])
print(a)
a = np.append(a,7)
print(a)
a = np.append(a,[1,2,3])
print(a)
[1 2 3 4 5 6]
[1 2 3 4 5 6 7]
[1 2 3 4 5 6 7 1 2 3]

np.where(condition, x, y)

满足条件(condition),输出x,不满足输出y。

y = np.array([1,2,3,4,5])
np.where(y>2,y,0)
array([0, 0, 3, 4, 5])
y = np.array([2,4,6,8,10])
np.where(a > 5)
(array([2, 3, 4]),)

np.where(condition)

只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

y[np.where(a > 5)] # 等价于 a[a>5]
array([ 6,  8, 10])

改变维度reshape()

x = np.array([1,2,3,4,5,6])
print(x.reshape(2,3))   
print(x.reshape([2,3])) # 也可以添加中括号
print(x.reshape([3,2])) # 也可以添加中括号
[[1 2 3]
 [4 5 6]]
 
[[1 2 3]
 [4 5 6]]
 
 [[1 2]
 [3 4]
 [5 6]]

扩展维度reshape()

y = np.array([[1,2],[4,4]])
print("原shape:",y.shape)
# 扩展维度,在其中添加数字1
print(y.reshape([1,2,2]))
print(y.reshape([2,1,2]))
print(y.reshape([2,2,1,1]))
原shape: (2, 2)
输出1
 [[[1 2]
  [4 4]]]
输出2
 [[[1 2]]
 [[4 4]]]
输出3
 [[[[1]]
  [[2]]]
 [[[4]]
  [[4]]]]

扩展维度np.expand_dims()

b =np.array([[1,2],[3,4],[5,6]])
print(b.shape)
(3, 2)
b1 = np.expand_dims(b, -1) # 在最后添加一个维度 (3,2)->(3,2,1)
print(b1)
print(b1.shape)
[[[1]
  [2]]

 [[3]
  [4]]

 [[5]
  [6]]]
(3, 2, 1)
b2 = np.expand_dims(b, 0) # 在最前(第0维)插入一个维度 (3,2)->(1,3,2)
print(b2)
print(b2.shape)
[[[1 2]
  [3 4]
  [5 6]]]
(1, 3, 2)
b3 = np.expand_dims(b, 1) # 在第二维度 插入一个维度 (3,2)->(3,1,2)
print(b3)
print(b3.shape)
[[[1 2]]

 [[3 4]]

 [[5 6]]]
(3, 1, 2)

扩展知识

普通Python列表拼接

a = [1,2,3,4,5,6]
b = [10,20,30,40,50,60]
x = int(len(a)/2)
a[:x] + b[x:]
[1, 2, 3, 40, 50, 60]

随机数

import random
random.randint(0,9)
0

多维列表拼接

a = [[1,3,5],[1,34,4]]
b = [[1,1,1]]
a+b
[[1, 3, 5], [1, 34, 4], [1, 1, 1]]

随时数

a = [1,2,3,4,5,6]
random.randint(0,len(a))
6

举报

相关推荐

0 条评论