Numpy常见用法


NumPy(Numerical Python)是一个科学计算基础库,比如数组计算、数据统计、随机数生成等,其核心类型为ndarray多维数组,可以进行向量和数学矩阵运算;

1.1、查看版本

C:\Users\sl>python
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.17.3'

1.2、数组创建

1.2.1、array()函数

格式:numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
object:数组或嵌套数列
dtype:数据元素数据类型(可选)
copy:对象是否需要复制(可选)
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok:默认返回一个与基类类型一致的数组
ndmin:指定生成数组的最小维度

import numpy as np

# 创建一维数组
a = np.array([1, 2, 3, 4, 6])
print(a)
print(a.shape)

# 创建二维数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a)
print(a.shape)

# 使用ndmin指定创建数组的维度
a = np.array([1, 2, 3, 4, 6], ndmin=3)
print(a)
print(a.shape)

# 指定数据类型,这里为浮点数
a = np.array([1, 2, 3, 4, 6], dtype=float)
print(a)
print(a.shape)
[1 2 3 4 6]
(5,)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3, 3)
[[[1 2 3 4 6]]]
(1, 1, 5)
[1. 2. 3. 4. 6.]
(5,)
1.2.2、arange()函数

格式:numpy.arange(start, stop, step, dtype)
start:开始值(默认0)
stop:结束值(开区间,不包含)
step:步长(默认1)
dtype:数据类型

# 创建一维数组
a = np.arange(1, 10, 2, float)
print(a)
# 创建二维数组
a = np.array([np.arange(1, 4), np.arange(4, 7), np.arange(7, 10)])
print(a)
[1. 3. 5. 7. 9.]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
1.2.3、zeros()函数

创建以0为元素的ndarray数组
格式:numpy.zeros(shape, dtype=float, order='C')

a = np.zeros(10)
print(a)
a = np.zeros(10, dtype=int)
print(a)
a = np.zeros((2, 3))
print(a)
[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.2.4、ones()函数

创建以1为元素的ndarray数组
格式:numpy.ones(shape, dtype=float, order='C')

a = np.ones(10)
print(a)
a = np.ones(10, dtype=int)
print(a)
a = np.ones((2, 3))
print(a)
[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.2.5、empty()函数

创建一个未初始化的数组(指定形状和数据类型)
格式:格式:numpy.empty(shape, dtype=float, order='C')

a = np.empty(5)
print(a)
a = np.empty(5, dtype=int)
print(a)
a = np.empty((2, 3))
print(a)
[1.95821574e-306 1.60219035e-306 1.37961506e-306 1.69504516e-315
 4.03901777e-270]
[0 0 0 0 0]
[[1.60220393e-306 9.34587382e-307 8.45599367e-307]
 [7.56598449e-307 1.33509389e-306 2.39203287e+198]]
1.2.6、linspace()函数

创建一个等差数列构成的一维数组
格式:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start:开始值
stop:结束值(如果endpoint为True,该值包含与数列中)
num:生成等步长样本数量(默认50)
endpoint:为True时,数列包含stop(默认True)
retstep:为True时,数列显示间距
dtype:数据类型

a = np.linspace(1, 10)
print(a)
a = np.linspace(1, 20, 10)
print(a)
a = np.linspace(1, 20, 10, dtype=int, retstep=True)
print(a)
[ 1.          1.18367347  1.36734694  1.55102041  1.73469388  1.91836735
  2.10204082  2.28571429  2.46938776  2.65306122  2.83673469  3.02040816
  3.20408163  3.3877551   3.57142857  3.75510204  3.93877551  4.12244898
  4.30612245  4.48979592  4.67346939  4.85714286  5.04081633  5.2244898
  5.40816327  5.59183673  5.7755102   5.95918367  6.14285714  6.32653061
  6.51020408  6.69387755  6.87755102  7.06122449  7.24489796  7.42857143
  7.6122449   7.79591837  7.97959184  8.16326531  8.34693878  8.53061224
  8.71428571  8.89795918  9.08163265  9.26530612  9.44897959  9.63265306
  9.81632653 10.        ]
[ 1.          3.11111111  5.22222222  7.33333333  9.44444444 11.55555556
 13.66666667 15.77777778 17.88888889 20.        ]
(array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 20]), 2.111111111111111)
1.2.7、logspace()函数

创建一个等比数列
格式:numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base:对数log的底数(其它属性同linspace)

a = np.logspace(0, 9, 10, base=2)
print(a)
[  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]
1.2.8、xx_likes()函数

创建一个与原函数形状一样的数组

np.random.seed(1)
a = np.random.randint(1, 10, size=(2, 3))
print(a)
za = np.zeros_like(a)
print(za)
oa = np.ones_like(a)
print(oa)
ea = np.empty_like(a)
print(ea)
[[6 9 6]
 [1 1 2]]
[[0 0 0]
 [0 0 0]]
[[1 1 1]
 [1 1 1]]
[[6619222 7536754 7274601]
 [    110 6553673       0]]

1.3、random随机数库

常用方法
random(size=None):返回[0.0, 1.0)范围的随机数
seed():确定随机生成器种子
permutation():返回一个序列的随机排列或返回一个随机排列的范围
shuffle():对一个序列就地随机【排列】
rand():产生均匀分布的样本值
randint():包含low、high、size三个参数,high默认None,如果有low范围为[0, low),如果有high范围为[low, high)
randn(d0, d1, ..., dn):返回一个或一组样本,具有标准正太分布(期望为0,方差为1)

1.3.1、random(size=None)
# 随机创建一维数组(15列)
a = np.random.random(size=5)
print(a)
# 随机创建二维素质(4行五列)
a = np.random.random(size=(4, 5))
print(a)
[0.10230503 0.25442698 0.41930947 0.30165265 0.68189801]
[[0.24702555 0.89721035 0.20062122 0.30017733 0.51678046]
 [0.28092732 0.2688093  0.87676116 0.23978144 0.2437702 ]
 [0.68349181 0.53069877 0.35583266 0.12053515 0.40850624]
 [0.63868165 0.7843134  0.1626199  0.31898501 0.6836526 ]]
1.3.2、randint()
# 随机生成[0, low5]范围的一维数组
a = np.random.randint(5, size=10)
print(a)
# 随机生成[low5, high10)范围的一维数组
a = np.random.randint(5, 10, size=10)
print(a)
# 随机生成[low5, high10)范围的二维数组
a = np.random.randint(5, 10, size=(2, 4))
print(a)
[4 2 4 0 0 4 0 2 0 0]
[7 9 6 6 5 5 5 9 8 8]
[[6 5 8 5]
 [7 7 7 9]]
1.3.3、rand()
# 返回标准正太分布样本
a = np.random.rand()
print(a)
a = np.random.rand(2, 4)
print(a)
a = np.random.rand(2, 3, 4)
print(a)
0.3540407374970307
[[0.66853671 0.643247   0.0051713  0.58653525]
 [0.79210707 0.34068145 0.75389736 0.53669272]]
[[[0.66992558 0.82954326 0.55729476 0.35154124]
  [0.27265465 0.67401188 0.70329272 0.69477358]
  [0.17762965 0.79916434 0.5645522  0.55861335]]

 [[0.33961132 0.5356875  0.42983352 0.02989346]
  [0.98643297 0.31793759 0.56777545 0.51361521]
  [0.1286993  0.35855944 0.10519044 0.70422589]]]
1.3.4、shuffle()
# 打乱元素顺序
a = np.array([1, 2, 3, 4, 5])
np.random.shuffle(a)
print(a)
[1 4 5 3 2]

1.4、常见ndarray对象属性

ndim:维度数量(轴的数量)
shape:数组维度(矩阵n行m列)
size:数组元素个数(相当于shape中n*m)
dtype:元素类型
itemsize:每个元素大小(单位-字节)
flags:内存信息
real:元素的实部
imag:元素的虚部
data:包含实际元素缓冲区(一般通过元素的索引获取元素,所以很少使用)

# ndarray对象属性
a = np.random.randint(1, 10, size=(2, 3))
print(a)
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
print(a.flags)
print(a.real)
print(a.imag)
print(a.data)
[[7 5 1]
 [5 6 4]]
2
(2, 3)
6
int32
4
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

[[7 5 1]
 [5 6 4]]
[[0 0 0]
 [0 0 0]]
<memory at 0x00000154C381DEA0>

1.5、常见操作

1.5.1、切片

与list切片操作一样,ndarray数组基于0-n的下标进行索引,可以设置start、stop、step参数

a = np.arange(10)
print(a)
print(a[:3])
print(a[1:6])
print(a[1:6:2])
print(a[-3:])
print(a[:-3])
print(a[::-1])
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[1 2 3 4 5]
[1 3 5]
[7 8 9]
[0 1 2 3 4 5 6]
[9 8 7 6 5 4 3 2 1 0]
1.5.2、数组变形
1.5.2.1、reshape()

一维变成多维

a = np.arange(12)
print(a)
b = a.reshape(3, 4)
# b = np.arange(12).reshape(3, 4)
print(b)
print('取第一行:', b[0])
print('取第一行的第二个元素:', b[0][1])
print('取第一列:', b[:, 0])
print('取第二和第三行中的第一和第二列:', b[1:3, 0:2])
[ 0  1  2  3  4  5  6  7  8  9 10 11]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
取第一行: [0 1 2 3]
取第一行的第二个元素: 1
取第一列: [0 4 8]
取第二和第三行中的第一和第二列: [[4 5]
 [8 9]]
1.5.2.2、ravel()

多维变一维

a = np.arange(12).reshape(3, 4)
print(a)
b = a.ravel()
print(b)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 0  1  2  3  4  5  6  7  8  9 10 11]
1.5.2.3、flatten()

多维变一维

a = np.arange(12).reshape(3, 4)
print(a)
c = a.flatten()
print(c)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 0  1  2  3  4  5  6  7  8  9 10 11]
1.5.3、数组拼接
1.5.3.1、hstack()
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[4, 5, 6], [7, 8, 9]])
print(np.hstack([a, b]))
[[1 2 3 4 5 6]
 [4 5 6 7 8 9]]

水平方式拼接(列方向)

1.5.3.2、vstack()

垂直方向拼接(行方式)

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[4, 5, 6], [7, 8, 9]])
print(np.vstack([a, b]))
[[1 2 3]
 [4 5 6]
 [4 5 6]
 [7 8 9]]
1.5.3.3、concatenate()

连接沿现有轴的数组序列,格式:np.concatenate((a1, a2, ...), axis)

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[4, 5, 6], [7, 8, 9]])
# 默认为axis=0垂直方向
print(np.concatenate([a, b]))
print(np.concatenate([a, b], axis=0))
print(np.concatenate([a, b], axis=1))
[[1 2 3]
 [4 5 6]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [4 5 6]
 [7 8 9]]
[[1 2 3 4 5 6]
 [4 5 6 7 8 9]]
1.5.4、数组拆分
1.5.4.1、split()

沿指定轴拆分子数组,格式:np.split(arr, indices_or_sections, axis)
arr表示数组;axis表示轴,默认0横切,1竖切;indices_or_sections为整数时,按照个数切分,为数组时按照位置切分;
一维数组

a = np.arange(12)
print(a)
b = np.split(a, 3)
print(b)
c = np.split(a, [3, 5])
print(c)
[ 0  1  2  3  4  5  6  7  8  9 10 11]
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8,  9, 10, 11])]
[array([0, 1, 2]), array([3, 4]), array([ 5,  6,  7,  8,  9, 10, 11])]

二维数组

a = np.arange(12).reshape(3, 4)
print(a)
b = np.split(a, 3, axis=0)
print(b)
c = np.split(a, 2, axis=1)
print(c)
d = np.split(a, [2, 3], axis=0)
print(d)
f = np.split(a, [2, 3], axis=1)
print(f)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[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]])]
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]]), array([], shape=(0, 4), dtype=int32)]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
1.5.4.2、vsplit()、hsplit()
a = np.arange(12).reshape(3, 4)
print(a)
b = np.vsplit(a, [2])  # 横切
print(b)
c = np.hsplit(a, [2])  # 竖切
print(c)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
1.5.5、转置

transpose()

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

多维数组

a = np.arange(24).reshape(2, 3, 4)
print(a)
b = np.transpose(a)
print(b)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
[[[ 0 12]
  [ 4 16]
  [ 8 20]]

 [[ 1 13]
  [ 5 17]
  [ 9 21]]

 [[ 2 14]
  [ 6 18]
  [10 22]]

 [[ 3 15]
  [ 7 19]
  [11 23]]]
1.5.6、函数计算
1.5.6.1、加减乘除
a = np.arange(9).reshape(3, 3)
print(a)
b = np.arange(2,5)
print(b)
# 加减乘除 等价于 + - * /
print(np.add(a, b))
print(np.subtract(a, b))
print(np.multiply(a, b))
print(np.divide(a, b))
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[2 3 4]
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[-2 -2 -2]
 [ 1  1  1]
 [ 4  4  4]]
[[ 0  3  8]
 [ 6 12 20]
 [12 21 32]]
[[0.         0.33333333 0.5       ]
 [1.5        1.33333333 1.25      ]
 [3.         2.33333333 2.        ]]
1.5.6.2、三角函数
a = np.array([0, 30, 45, 60, 90])
print(np.sin(a * np.pi / 180))
print(np.cos(a * np.pi / 180))
print(np.tan(a * np.pi / 180))
[0.         0.5        0.70710678 0.8660254  1.        ]
[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
 6.12323400e-17]
[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
 1.63312394e+16]
1.5.6.3、四舍五入
a = np.array([2.3, 2.345, 2.6, 112.123456, 152.123456])
print(a)
print(np.around(a, 2))  # 格式 np.around(arr, decimals),decimals为舍入的小数为,默认0print(np.around(a, -2))  # 如果为负数,整数将四舍五入到小数点左侧的位置
print(np.floor(a))  # 向下取整
print(np.ceil(a))  # 向上取整
[  2.3        2.345      2.6      112.123456 152.123456]
[  2.3    2.35   2.6  112.12 152.12]
[  0.   0.   0. 100. 200.]
[  2.   2.   2. 112. 152.]
[  3.   3.   3. 113. 153.]
1.5.7、聚合函数
a = np.arange(1, 9)
print(np.sum(a))  # 求和
print(np.prod(a))  # 相乘
print(np.mean(a))  # 平均值
print(np.min(a))  # 最小值
print(np.max(a))  # 最大值
print(np.argmin(a))  # 最小值下标
print(np.argmax(a))  # 最大值下标
print(np.std(a))  # 标准差
print(np.var(a))  # 方差
print(np.median(a))  # 中位数
print(np.power(a, 3))  # 幂运算
print(np.sqrt(a))  # 开方
print(np.exp(10))  # 以e为底的指数
print(np.log(10))  # 对数
36
40320
4.5
1
8
0
7
2.29128784747792
5.25
4.5
[  1   8  27  64 125 216 343 512]
[1.         1.41421356 1.73205081 2.         2.23606798 2.44948974
 2.64575131 2.82842712]
22026.465794806718
2.302585092994046
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值