numpy简单用法

NumPy是Python中用于数值计算的核心库之一。它提供了高性能的多维数组对象(称为ndarray),以及许多用于操作这些数组的函数。以下是NumPy的一些常见用法:

# 导入NumPy库
import numpy as np

1.创建数组:使用numpy.array()函数可以从Python列表或元组创建NumPy数组;查看数组属性,如形状(shape)

# 创建一个包含单个元素的数组
t1 = np.array(12)

# 输出数组
t1
array(12)
# 查看数组形状
t1.shape
()
# 创建一个二维数组
t2= np.array([[1,2,3],[4,5,6]])

# 输出数组
t2
array([[1, 2, 3],
       [4, 5, 6]])
# 查看数组形状
t2.shape
(2, 3)
# 创建一个三维数组
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
# 输出数组
t3
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
# 查看数组形状
t3.shape
(2, 2, 3)

2.数组操作:NumPy的重塑操作(reshape)

# 使用 arange 函数创建一个数组
t4 = np.arange(12)
# 输出数组
t4
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
# 将数组重新调整形状为3行4列
t4.reshape((3,4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
# 使用 arange 函数创建一个3维数组,并将其形状设为2x3x4
t5 = np.arange(24).reshape(2,3,4)
# 输出数组
t5
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
# 将数组重新调整形状为4行6列
t5.reshape(4,6)
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 输出 t5,检查是否原始数组保持不变
t5
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
# 将 t5 重新调整形状为4行6列并更新 t5
t5=t5.reshape(4,6)
# 输出数组 t5
t5
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 将数组t5重新塑形为一维数组,长度为24
t5.reshape(24,)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])
# 将数组t5重新塑形为二维数组,形状为(24,1)
t5.reshape(24,1)
array([[ 0],
       [ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10],
       [11],
       [12],
       [13],
       [14],
       [15],
       [16],
       [17],
       [18],
       [19],
       [20],
       [21],
       [22],
       [23]])
# 将数组t5重新塑形为二维数组,形状为(1,24)
t5.reshape(1, 24)
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
        16, 17, 18, 19, 20, 21, 22, 23]])
# 将数组t5重新塑形为一维数组,长度为t5的元素总数
t6 = t5.reshape((t5.shape[0]*t5.shape[1],))
# 输出t6
t6
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])
# 使用flatten方法将数组t5重新塑形为一维数组
t5.flatten()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

3.数学运算:NumPy支持各种数学运算,如加法、减法、乘法、除法、矩阵运算等

# 输出原始数组t5
t5
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 将数组t5中的每个元素都加2
t5+2
array([[ 2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25]])
# 将数组t5中的每个元素都乘以2
t5*2
array([[ 0,  2,  4,  6,  8, 10],
       [12, 14, 16, 18, 20, 22],
       [24, 26, 28, 30, 32, 34],
       [36, 38, 40, 42, 44, 46]])
# 将数组t5中的每个元素都除以2
t5/2
array([[ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5],
       [ 3. ,  3.5,  4. ,  4.5,  5. ,  5.5],
       [ 6. ,  6.5,  7. ,  7.5,  8. ,  8.5],
       [ 9. ,  9.5, 10. , 10.5, 11. , 11.5]])
# 尝试将数组t5中的每个元素都除以0,会出现警告,因为除以0是未定义的
t5/0
C:\Users\86132\AppData\Local\Temp\ipykernel_19092\1731533436.py:1: RuntimeWarning: divide by zero encountered in divide
  t5/0
C:\Users\86132\AppData\Local\Temp\ipykernel_19092\1731533436.py:1: RuntimeWarning: invalid value encountered in divide
  t5/0





array([[nan, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf]])
# 输出原始数组t5
t5
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 创建一个4x6的数组t6,其元素值从100开始递增,不包括124
t6=np.arange(100,124).reshape(4,6)
# 输出数组t6
t6
array([[100, 101, 102, 103, 104, 105],
       [106, 107, 108, 109, 110, 111],
       [112, 113, 114, 115, 116, 117],
       [118, 119, 120, 121, 122, 123]])
# 将数组t6和t5相加
t6+t5
array([[100, 102, 104, 106, 108, 110],
       [112, 114, 116, 118, 120, 122],
       [124, 126, 128, 130, 132, 134],
       [136, 138, 140, 142, 144, 146]])
# 将数组t6和t5相乘
t6*t5
array([[   0,  101,  204,  309,  416,  525],
       [ 636,  749,  864,  981, 1100, 1221],
       [1344, 1469, 1596, 1725, 1856, 1989],
       [2124, 2261, 2400, 2541, 2684, 2829]])
# 将数组t6和t5相除,由于t5中包含0,因此会出现警告
t6/t5
C:\Users\86132\AppData\Local\Temp\ipykernel_19092\2152116664.py:1: RuntimeWarning: divide by zero encountered in divide
  t6/t5





array([[         inf, 101.        ,  51.        ,  34.33333333,
         26.        ,  21.        ],
       [ 17.66666667,  15.28571429,  13.5       ,  12.11111111,
         11.        ,  10.09090909],
       [  9.33333333,   8.69230769,   8.14285714,   7.66666667,
          7.25      ,   6.88235294],
       [  6.55555556,   6.26315789,   6.        ,   5.76190476,
          5.54545455,   5.34782609]])
# 创建一个长度为6的数组t7,其元素值从0开始递增
t7=np.arange(0,6)
# 输出数组t7
t7
array([0, 1, 2, 3, 4, 5])
t5
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 将数组t5和t7相减
t5-t7
array([[ 0,  0,  0,  0,  0,  0],
       [ 6,  6,  6,  6,  6,  6],
       [12, 12, 12, 12, 12, 12],
       [18, 18, 18, 18, 18, 18]])
# 创建一个4x1的数组(列向量)
t8=np.arange(4).reshape(4,1)
# 输出t8
t8
array([[0],
       [1],
       [2],
       [3]])
# 将t8从t5中减去
t5-t8
array([[ 0,  1,  2,  3,  4,  5],
       [ 5,  6,  7,  8,  9, 10],
       [10, 11, 12, 13, 14, 15],
       [15, 16, 17, 18, 19, 20]])
# 创建一个10个元素的数组
t9=np.arange(10)
# 输出t9
t9
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
t5
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 尝试将t9从t5中减去,但由于形状不匹配,会引发错误
t5-t9
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

Cell In[97], line 1
----> 1 t5-t9


ValueError: operands could not be broadcast together with shapes (4,6) (10,) 

4.NumPy数组的转置

# 创建一个4x6的数组
t2 = np.arange(24).reshape(4,6)
# 输出t2
t2
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 转置t2
t2.transpose()
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])
# 转置t2的另一种方法
t2.T
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])
# 使用swapaxes方法交换t2的轴
t2.swapaxes(1,0)
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

5.NumPy数组的条件索引操作

t2
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 创建一个布尔掩码,其中t2中小于10的元素为True,否则为False
t2<10
array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])
# 将t2中小于10的元素设置为3
t2[t2<10]=3
# 输出t2
t2
array([[ 3,  3,  3,  3,  3,  3],
       [ 3,  3,  3,  3, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 选择t2中大于20的元素
t2[t2>20]
array([21, 22, 23])
# 将t2中大于20的元素设置为20
t2[t2 > 20]=20
# 输出t2
t2
array([[ 3,  3,  3,  3,  3,  3],
       [ 3,  3,  3,  3, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 20, 20, 20]])
# 创建一个新的数组,其中t2中小于等于3的元素为100,否则为300
np.where(t2<=3,100,300)
array([[100, 100, 100, 100, 100, 100],
       [100, 100, 100, 100, 300, 300],
       [300, 300, 300, 300, 300, 300],
       [300, 300, 300, 300, 300, 300]])
# 尝试将NaN赋值给t2的第4行第4列,但由于t2是浮点数数组,所以会引发错误
t2[3,3]=np.nan
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

Cell In[107], line 1
----> 1 t2[3,3]=np.nan


ValueError: cannot convert float NaN to integer
# 将t2转换为浮点数数组
t2=t2.astype(float)
# 将t2的第4行第4列设置为NaN
t2[3, 3] = np.nan
# 对数组 t2 中的元素进行剪切(clip)操作,将小于10的元素替换为10,将大于18的元素替换为18,而将处于10和18之间的元素保持不变
t2.clip(10,18)
array([[10., 10., 10., 10., 10., 10.],
       [10., 10., 10., 10., 10., 11.],
       [12., 13., 14., 15., 16., 17.],
       [18., 18., 18., nan, 18., 18.]])

6.NumPy数组的堆叠操作

# 创建一个2x6的数组
t1 = np.arange(0,12).reshape(2, 6)

t1
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])
# 创建一个2x6的数组
t2 = np.arange(12, 24).reshape(2, 6)

t2
array([[12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 垂直堆叠t1和t2
np.vstack((t1, t2))
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# 水平堆叠t1和t2
np.hstack((t1, t2))
array([[ 0,  1,  2,  3,  4,  5, 12, 13, 14, 15, 16, 17],
       [ 6,  7,  8,  9, 10, 11, 18, 19, 20, 21, 22, 23]])

7.NumPy数组行列的交换操作

# 创建一个3x4的数组
t = np.arange(12, 24).reshape(3, 4)

t
array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
# 交换t中的第2行和第3行
t[[1, 2], :] = t[[ 2,1], :]

t
array([[12, 13, 14, 15],
       [20, 21, 22, 23],
       [16, 17, 18, 19]])
# 交换t中第1列和第3列
t[:,[0,2]]=t[:,[2,0]]

t
array([[14, 13, 12, 15],
       [22, 21, 20, 23],
       [18, 17, 16, 19]])

8.NumPy创建特殊数组的快捷操作

# 创建一个2x3的全1数组
np.ones((2, 3))
array([[1., 1., 1.],
       [1., 1., 1.]])
# 创建一个3x4的全0数组
np.zeros((3, 4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
# 创建一个10x10的单位矩阵
np.eye(10)
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
# 创建一个4x4的单位矩阵
t = np.eye(4)

t
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

9.NumPy的统计函数和NaN的特殊情况

# 在t的每一列中找到最大值的索引
np.argmax(t, axis=0)
array([0, 1, 2, 3], dtype=int64)
# 将t中所有值为1的元素替换为-1
t[t==1]=-1

t
array([[-1.,  0.,  0.,  0.],
       [ 0., -1.,  0.,  0.],
       [ 0.,  0., -1.,  0.],
       [ 0.,  0.,  0., -1.]])
# 在t的每一行中找到最小值的索引
np.argmin(t, axis=1)
array([0, 1, 2, 3], dtype=int64)
# 创建一个4x5的随机整数数组,范围在10到20之间
np.random.randint(10, 20, (4,5))
array([[11, 17, 15, 12, 10],
       [13, 11, 13, 17, 10],
       [14, 16, 11, 12, 17],
       [19, 18, 11, 13, 16]])
# 比较两个NaN值是否相等
np.nan == np.nan
False
t2
array([[1, 2, 3],
       [4, 5, 6]])
# t2的数值类型改为浮点数
t2 = t2.astype(float)

# 将t2的第2行第2列设置为NaN
t2[1, 1] = np.nan

t2
array([[ 0.,  2.,  3.],
       [ 0., nan,  6.]])
# 将t2的第一列设置为0
t2[:,0]=0

t2
array([[ 0.,  2.,  3.],
       [ 0., nan,  6.]])
# 计算t2中非零元素的数量
np.count_nonzero(t2)
4
# 创建一个布尔数组,其中t2中不等于自身的位置为True
t2!=t2
array([[False, False, False],
       [False,  True, False]])
# 计算t2中不等于自身的元素的数量
np.count_nonzero(t2 != t2)
1
# 创建一个布尔数组,其中t2中的NaN位置为True
np.isnan(t2)
array([[False, False, False],
       [False,  True, False]])
# 计算t2中NaN的数量
np.count_nonzero(np.isnan(t2))
1
# 计算t2中所有元素的和,由于t2中包含NaN,结果为NaN
np.sum(t2)
nan
# 创建一个3x4的整数数组
t3=np.arange(12).reshape(3,4)

t2
array([[ 0.,  2.,  3.],
       [ 0., nan,  6.]])
t3
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
# 计算t3中所有元素的和
np.sum(t3)
66
# 计算t3中每一列的和
np.sum(t3, axis=0)
array([12, 15, 18, 21])
# 计算t3中每一行的和
np.sum(t3, axis=1)
array([ 6, 22, 38])
# 计算t2中每一列的和,由于t2中包含NaN,结果包含NaN
np.sum(t2, axis=0)
array([ 0., nan,  9.])
t2
array([[ 0.,  2.,  3.],
       [ 0., nan,  6.]])
t2.sum(axis=0)
array([ 0., nan,  9.])
# 计算t2中每一列的平均值,由于t2中包含NaN,结果包含NaN
t2.mean(axis=0)
array([0. , nan, 4.5])
# 计算t2中每一列的中位数,由于t2中包含NaN,结果包含NaN
np.median(t2, axis=0)
array([0. , nan, 4.5])
# 计算t2的整体中位数,结果为NaN
np.median(t2)
nan
# 计算t2中每一列的最大值,由于t2中包含NaN,结果包含NaN
t2.max(axis=0)
array([ 0., nan,  6.])
# 计算t2中每一列的最小值,由于t2中包含NaN,结果包含NaN
t2.min(axis=0)
array([ 0., nan,  3.])
# 计算t2中每一列的极差(最大值与最小值之差),由于t2中包含NaN,结果包含NaN
np.ptp(t2, axis=0)
array([ 0., nan,  3.])
# 计算t2的整体极差,结果为NaN
np.ptp(t2)
nan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJU_AI_NB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值