numpy详解

暂时写这么多,之后有时间进行补充!

1.初步

一般使用np(numpy)

import numpy as np

2.zeros函数,ones函数

顾名思义zeros函数就是创建用0填充的矩阵,而ones函数则是创建用1填充的矩阵

Z = np.zeros(10)
print(Z)

result:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]


Z = np.zeros((5,5))
print(Z)

result:
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

Z = np.ones((3,3,3))
print(Z)

result:
[[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]

3.arange函数

arange函数根据start(包含)与stop(不包含)指定的范围以及step(默认是1)设定的步长,生成一个 ndarray
arange(start,stop,step)

Z = np.arange(10,50)
print(Z)
result:
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]

Z = np.arange(50)
Z = Z[::-1] #切片知识,倒置
print(Z)
result:
[49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26
 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2
  1  0]

Z = np.arange(10,20,0.2) #步长为小数也可以
print(Z)
result:
[10.  10.2 10.4 10.6 10.8 11.  11.2 11.4 11.6 11.8 12.  12.2 12.4 12.6
 12.8 13.  13.2 13.4 13.6 13.8 14.  14.2 14.4 14.6 14.8 15.  15.2 15.4
 15.6 15.8 16.  16.2 16.4 16.6 16.8 17.  17.2 17.4 17.6 17.8 18.  18.2
 18.4 18.6 18.8 19.  19.2 19.4 19.6 19.8]

4.reshape函数

Z = np.arange(12).reshape(3,4)
print(Z)
result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

Z = np.arange(12).reshape(3,-1)# 注意-1表示自动计算列数,数组或者矩阵里面所有的元素个数/3, 该数必须是整数,不然报错
print(Z)
result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

Z = np.arange(12).reshape(-1,2)
print(Z)
result:
[[ 0  1]
 [ 2  3]
 [ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]]

5.nonzero函数

nonzero函数用来寻找非0数字的位置

nz = np.nonzero([1,2,0,0,4,0])
print(nz)
result:
(array([0, 1, 4], dtype=int64),)

nz = np.nonzero([[1,2,0,0,4,0],[1,0,0,0,2,0]])
print(nz)
result:
(array([0, 0, 0, 1, 1], dtype=int64), array([0, 1, 4, 0, 4], dtype=int64))

6.eye函数

创建单位矩阵

Z = np.eye(3)
print(Z)
result:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

Z = np.eye(3,4)
print(Z)
result:
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]]

Z = np.eye(3,4,1)# 1表示向右移动一位
print(Z)
result:
[[0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

7.random函数

random函数是一个大集体

# 在0.0-1.0之内随机采样,生成3*3*3的矩阵,同random_sample
Z = np.random.random((3,3,3))
print(Z)
result:
[[[7.10814455e-01 1.56377352e-01 4.89797888e-01]
  [7.19437082e-04 9.52608478e-01 4.80563696e-01]
  [4.20960506e-01 4.94450677e-01 3.81385335e-01]]

 [[2.13768284e-02 3.04147484e-01 2.72083015e-01]
  [5.83624949e-01 5.05400898e-01 6.90514241e-01]
  [6.67028364e-01 8.64926031e-01 8.91323908e-01]]

 [[6.10570358e-01 7.66965389e-01 9.02382794e-01]
  [7.15163408e-01 3.19030084e-01 5.29582037e-01]
  [9.66168104e-01 4.81311435e-01 1.01713279e-01]]]

# 生成1(闭区间)-10(开区间)之内的3*2随机数
Z = np.random.randint(1,10,(3,2))
print(Z)
result:
[[6 4]
 [8 3]
 [2 5]]

# 生成1(闭区间)-5(闭区间)之内的3*2随机数
Z = np.random.random_integers(1,5,(3,2))
print(Z)
result:
[[1 5]
 [1 3]
 [1 1]]

# uniform(low=0, high=1, size),从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high 
Z = np.random.uniform(1,5,(3,2))
print(Z)
result:
[[2.14046721 4.77548873]
 [1.49745706 1.69981635]
 [3.8691427  3.71096113]]

#np.random.normal(loc, scale, size)
#loc:float类型,此概率分布的均值(对应着整个分布的中心centre)
#scale:float类型此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
#输出的shape,默认为None,只输出一个值
#另np.random.randn(size)所谓标准正态分布(μ=0,σ=1),对应于np.random.normal(loc=0, scale=1, size)
Z = np.random.normal(0,1,(3,1))
print(Z)
result:
[[ 0.91673935]
 [-0.29160901]
 [-0.02777222]]

#RandomState() 之后补充

8.pad函数

pad(array, pad_width, mode, constant_values) 返回值:数组

array——表示需要填充的数组;
pad_width——表示每个轴(axis)边缘需要填充的数值数目。
参数输入方式为:((before_1, after_1), … (before_N, after_N)),其中(before_1, after_1)表示第1轴两边缘分别填充before_1个和after_1个数值。取值为:{sequence, array_like, int}
mode——表示填充的方式

填充方式
‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0
‘edge’——表示用边缘值填充
‘linear_ramp’——表示用边缘递减的方式填充
‘maximum’——表示最大值填充
‘mean’——表示均值填充
‘median’——表示中位数填充
‘minimum’——表示最小值填充
‘reflect’——表示对称填充
‘symmetric’——表示对称填充
‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面

Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)
result:
[[0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0.]]

Z = np.ones((5,5))
#(3,2)表示在A的第[1]轴填充(二维数组中,1轴表示行!),即在0轴前面(上面)填充3个宽度的0,在后面(下面)填充2个0
#(2,3)表示在A的第[0]轴填充(二维数组中,0轴表示列!),即在1轴前面填充3个宽度的0,后面填充2个宽度的0
Z = np.pad(Z,((3,2),(3,2)), mode='constant',constant_values=0)
print(Z)
result:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 1. 1. 1. 1. 0. 0.]
 [0. 0. 0. 1. 1. 1. 1. 1. 0. 0.]
 [0. 0. 0. 1. 1. 1. 1. 1. 0. 0.]
 [0. 0. 0. 1. 1. 1. 1. 1. 0. 0.]
 [0. 0. 0. 1. 1. 1. 1. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

Z = np.zeros((3,3))
# 分别用1,2来填充前面和后面的。可以这么理解
#先将上面2行用1填充,任何将下面1行用2填充,接着用1填充前面一列(注意这里有覆盖),最后用2填充后面两列(同样有覆盖)。
Z = np.pad(Z, ((2,1),(1,2)), mode='constant',constant_values=(1,2))
print(Z)
result:
[[1. 1. 1. 1. 2. 2.]
 [1. 1. 1. 1. 2. 2.]
 [1. 0. 0. 0. 2. 2.]
 [1. 0. 0. 0. 2. 2.]
 [1. 0. 0. 0. 2. 2.]
 [1. 2. 2. 2. 2. 2.]]

Z = np.zeros((3,3))
# 注意上下前后四个填充的值均可不一样,如下面用1填充上面两行。
Z = np.pad(Z, ((2,1),(1,2)), mode='constant',constant_values=((1,2),(3,4)))
print(Z)
result:
[[3. 1. 1. 1. 4. 4.]
 [3. 1. 1. 1. 4. 4.]
 [3. 0. 0. 0. 4. 4.]
 [3. 0. 0. 0. 4. 4.]
 [3. 0. 0. 0. 4. 4.]
 [3. 2. 2. 2. 4. 4.]]

9.nan函数

nan为空值,先看一组测试

print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(np.nan in set([np.nan]))# set为集合
print(0.3 == 3 * 0.1)
x = np.array([1, 1, 8, np.nan, 10])
print(np.nan in x)
print(np.isnan(x))
result:
nan
False
False
nan
True
False
False
[False False False  True False]

注意nan为浮点型,而在Python中浮点数是不对等的,不能用==,在np中nan需要用isnan这个函数来识别。

10 diag函数

Z = np.diag(1+np.arange(4))
print(Z)
result:
[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

Z = np.diag(1+np.arange(4),k=2)
print(Z)
result:
[[0 0 1 0 0 0]
 [0 0 0 2 0 0]
 [0 0 0 0 3 0]
 [0 0 0 0 0 4]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]]

Z = np.diag(1+np.arange(4),k=-2)
print(Z)
result:
[[0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [1 0 0 0 0 0]
 [0 2 0 0 0 0]
 [0 0 3 0 0 0]
 [0 0 0 4 0 0]]

11.unravel_index函数

numpy.unravel_index(indices, dims)
返回indices中的元素在维度为dims的数组中的索引值,默认按元组的形式返回。

# 寻找(6,7,8)的第一百个元素的位置
print(np.unravel_index(99,(6,7,8)))
result:
(1, 5, 3)

12.tile函数

以前面的数/数组为整体,第二个为划分为x行y列的矩阵

Z = np.tile( np.array([[0,1],[1,0]]), (3,3))
print(Z)
result:
[[0 1 0 1 0 1]
 [1 0 1 0 1 0]
 [0 1 0 1 0 1]
 [1 0 1 0 1 0]
 [0 1 0 1 0 1]
 [1 0 1 0 1 0]]

13.intersect1d函数

寻找两个数组的交集

Z1 = np.random.randint(1,10,10)
Z2 = np.random.randint(1,10,10)
print(Z1)
print(Z2)
print(np.intersect1d(Z1,Z2))
result:
[2 5 7 5 9 5 8 9 4 3]
[7 9 2 5 5 3 8 2 4 9]
[2 3 4 5 7 8 9]

14.datetime64函数

时间函数

yesterday = np.datetime64('today') - np.timedelta64(1)
today     = np.datetime64('today')
tomorrow  = np.datetime64('today') + np.timedelta64(1)
print(yesterday)
print(today)
print(tomorrow)
result:
2021-08-02
2021-08-03
2021-08-04

Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)
result:
['2016-07-01' '2016-07-02' '2016-07-03' '2016-07-04' '2016-07-05'
 '2016-07-06' '2016-07-07' '2016-07-08' '2016-07-09' '2016-07-10'
 '2016-07-11' '2016-07-12' '2016-07-13' '2016-07-14' '2016-07-15'
 '2016-07-16' '2016-07-17' '2016-07-18' '2016-07-19' '2016-07-20'
 '2016-07-21' '2016-07-22' '2016-07-23' '2016-07-24' '2016-07-25'
 '2016-07-26' '2016-07-27' '2016-07-28' '2016-07-29' '2016-07-30'
 '2016-07-31']

15.矩阵运算

如计算((A+B)*(-A/2))

A = np.ones(3)*1
B = np.ones(3)*2
np.add(A,B,out=B)
np.divide(A,2,out=A)
np.negative(A,out=A) #取负号
np.multiply(A,B,out=A)
print(A)
result:
[-1.5 -1.5 -1.5]

16.fromiter函数

fromiter(iterable, dtype, count = -1) 从一个循环对象中提取数字,产生新的数组
Iterable: 为生成数组提供数据的对象
dtype: 生成的数组內数据类型

def generate():
    for x in range(10):
        yield x
Z = np.fromiter(generate(),dtype=float,count=-1)
print(Z)
result:
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

generate = (x for x in range(0,10))
Z = np.fromiter(generate,dtype=float,count=-1)
print(Z)
result:
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

17.allclose函数、array_equal函数

A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
# Assuming identical shape of the arrays and a tolerance for the comparison of values
equal = np.allclose(A,B)
print(equal)
# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)
result:
False
False

18.meshgrid函数

从坐标向量中返回坐标矩阵

Z = np.meshgrid(np.linspace(0,1,5))
print(Z)
result:
[array([0.  , 0.25, 0.5 , 0.75, 1.  ])]

Z = np.zeros((5,5), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,5),
                             np.linspace(0,1,5))
print(Z)
result:
[[(0.  , 0.  ) (0.25, 0.  ) (0.5 , 0.  ) (0.75, 0.  ) (1.  , 0.  )]
 [(0.  , 0.25) (0.25, 0.25) (0.5 , 0.25) (0.75, 0.25) (1.  , 0.25)]
 [(0.  , 0.5 ) (0.25, 0.5 ) (0.5 , 0.5 ) (0.75, 0.5 ) (1.  , 0.5 )]
 [(0.  , 0.75) (0.25, 0.75) (0.5 , 0.75) (0.75, 0.75) (1.  , 0.75)]
 [(0.  , 1.  ) (0.25, 1.  ) (0.5 , 1.  ) (0.75, 1.  ) (1.  , 1.  )]]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy是一个开源的Python科学计算库,它提供了一个强大的多维数组对象和用于处理这些数组的函数。下面是关于numpy模块的详细解释: 1. 数组:numpy最重要的特性之一是它的数组对象(numpy.ndarray)。这是一个由相同类型的元素组成的多维容器。数组可以是一维、二维、三维等等,并且可以包含整数、浮点数、复数等不同类型的数据。 2. 数组操作:numpy提供了一系列用于操作数组的函数和方法。你可以进行基本的数学运算(加、减、乘、除等)、统计计算(平均值、标准差等)、逻辑运算(与、或、非等)以及数组的切片、索引等操作。 3. 广播:numpy的广播功能使得不同形状的数组之间的运算成为可能。它可以自动调整不同形状数组的大小,使得它们能够进行元素级别的运算。 4. 矩阵操作:numpy还提供了许多矩阵操作的函数和方法。你可以进行矩阵的转置、求逆、乘法、求特征值和特征向量等操作。 5. 随机数生成:numpy包含了一个random子模块,用于生成各种类型的随机数。你可以生成服从特定分布(如正态分布、均匀分布等)的随机数,并进行各种随机抽样操作。 6. 文件操作:numpy可以读取和写入数组数据到磁盘。它支持多种数据格式,包括文本文件、二进制文件和压缩文件。 总之,numpy提供了丰富的功能和高效的数组操作,使得Python成为一种强大的科学计算语言。它在数据分析、机器学习、图像处理等领域广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值