python数据处理——numpy

Numpy简介

NumPy库的一些主要特点:

  1. NumPy的核心数据结构是数组对象(ndarray),可以快速高效地对数组执行各种数学运算操作。
  2. NumPy的数组对象是同质性的,即数组中所有元素的数据类型必须相同。
  3. NumPy的数组对象可以支持广播功能,即在执行某些操作时,可以将不同形状的数组自动转换为相同形状,省去了重复和冗余的代码。
  4. NumPy还提供了大量的数学函数和操作符,使得数学计算和科学计算变得更加简单和高效。
  5. NumPy的数组对象可以用于多种科学计算领域,包括图像处理、信号处理、线性代数、统计分析等。

Numpy创建数组

使用NumPy创建数组时,有多种方便的方法可供选择。以下是一些常用的数组创建方法以及相应的示例:

  1. 使用np.array()函数从Python列表或元组创建数组:
import numpy as np

# 从列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)

# 从元组创建数组
arr2 = np.array((6, 7, 8, 9, 10))
print(arr2)

输出结果:

[1 2 3 4 5]
[ 6  7  8  9 10]
  1. 使用np.zeros()函数创建全零数组:
import numpy as np

# 创建全零一维数组
arr1 = np.zeros(5)
print(arr1)

# 创建全零二维数组
arr2 = np.zeros((3, 4))
print(arr2)

输出结果:

Copy Code[0. 0. 0. 0. 0.]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
  1. 使用np.ones()函数创建全一数组:
import numpy as np

# 创建全一一维数组
arr1 = np.ones(5)
print(arr1)

# 创建全一二维数组
arr2 = np.ones((2, 3))
print(arr2)

输出结果:

Copy Code[1. 1. 1. 1. 1.]
[[1. 1. 1.]
 [1. 1. 1.]]
  1. 使用np.arange()函数创建指定范围的数组:
import numpy as np

# 创建从0到9的一维数组
arr1 = np.arange(10)
print(arr1)

# 创建从3到9的一维数组,步长为2
arr2 = np.arange(3, 10, 2)
print(arr2)

输出结果:

[0 1 2 3 4 5 6 7 8 9]
[3 5 7 9]
  1. 使用np.linspace()函数创建等间隔的数组:
import numpy as np

# 创建0到1之间的五个等间隔数值的一维数组
arr1 = np.linspace(0, 1, 5)
print(arr1)

输出结果:

[0.   0.25 0.5  0.75 1.  ]

这些只是NumPy库中创建数组的几种常用方法,还有其他更多的方法可供使用。您可以根据自己的需求选择合适的方法来创建数组。

Numpy的广播功能

广播的规则如下:

  1. 如果两个数组的维数不同,则将较小数组的形状扩展为较大数组的形状,直到它们的形状相同。
  2. 如果两个数组在某个维度上的长度不同且其中一个数组的长度为1,则在该维度上进行广播。
  3. 如果两个数组在某个维度上的长度不同且两个数组的长度都不为1,则出现形状不兼容的错误。

广播功能可以通过简单的示例来理解。

import numpy as np

# 创建一个二维数组和一个一维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])

# 使用广播将b与a中的每一行相加
c = a + b

print("a = \n", a)
print("b = ", b)
print("c = \n", c)

输出结果:

a = 
[[1 2 3]
 [4 5 6]]
b =  [10 20 30]
c = 
[[11 22 33]
 [14 25 36]]

在此示例中,数组a的形状为(2, 3),数组b的形状为(3,)。当执行操作a + b时,b数组被广播成了(2, 3)的形状,然后两个数组相加得到数组c,其形状也是(2, 3)

在处理形状不同的数组时,广播机制可以显著简化代码并提高效率。

需要注意的是,在某些情况下,广播操作可能会带来意料之外的结果,例如:

import numpy as np

# 创建一个一维数组和一个常数
a = np.array([1, 2, 3])
b = 10

# 使用广播将b加到a中
c = a + b

print("a = ", a)
print("b = ", b)
print("c = ", c)

输出结果:

a =  [1 2 3]
b =  10
c =  [11 12 13]

在此示例中,常数b被视为形状为(1,)的数组。当与形状为(3,)的数组a进行广播运算时,b数组被广播成(3,)的形状,然后进行相应的运算。这种广播行为在某些情况下可能会导致出乎意料的结果,因此需要格外小心。

总结起来,广播功能是Numpy中非常实用的一个特性,它允许我们对形状不同的数组进行运算,从而简化了代码并提高了效率。在使用广播功能时需要注意其规则,并小心处理数据类型和形状不一致的情况

Numpy常见函数

  1. 数学函数:

    • np.sqrt(x): 计算数组x中每个元素的平方根。

      import numpy as np
      
      x = np.array([4, 9, 16])
      result = np.sqrt(x)
      print(result)  # 输出: [2. 3. 4.]
      
    • np.exp(x): 计算数组x中每个元素的指数值。

      import numpy as np
      
      x = np.array([1, 2, 3])
      result = np.exp(x)
      print(result)  # 输出: [ 2.71828183  7.3890561  20.08553692]
      
    • np.log(x): 计算数组x中每个元素的自然对数。

      import numpy as np
      
      x = np.array([1, 10, 100])
      result = np.log(x)
      print(result)  # 输出: [0.         2.30258509 4.60517019]
      
    • np.log10(x): 计算数组x中每个元素的以10为底的对数。

      import numpy as np
      
      x = np.array([1, 10, 100])
      result = np.log10(x)
      print(result)  # 输出: [0. 1. 2.]
      
    • np.sin(x), np.cos(x), np.tan(x): 计算数组x中每个元素的正弦、余弦和正切值。

      import numpy as np
      
      x = np.array([0, np.pi/2, np.pi])
      sin_result = np.sin(x)
      cos_result = np.cos(x)
      tan_result = np.tan(x)
      print("sin:", sin_result)  # 输出: [0.0000000e+00 1.0000000e+00 1.2246064e-16]
      print("cos:", cos_result)  # 输出: [ 1.000000e+00  6.123234e-17 -1.000000e+00]
      print("tan:", tan_result)  # 输出: [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
      
    • np.arcsin(x), np.arccos(x), np.arctan(x): 计算数组x中每个元素的反正弦、反余弦和反正切值。

      import numpy as np
      
      x = np.array([-1, 0, 1])
      arcsin_result = np.arcsin(x)
      arccos_result = np.arccos(x)
      arctan_result = np.arctan(x)
      print("arcsin:", arcsin_result)  # 输出: [-1.57079633  0.          1.57079633]
      print("arccos:", arccos_result)  # 输出: [3.14159265 1.57079633 0.        ]
      print("arctan:", arctan_result)  # 输出: [-0.78539816  0.          0.78539816]
      
    • np.sinh(x), np.cosh(x), np.tanh(x): 计算数组x中每个元素的双曲正弦、双曲余弦和双曲正切值。

      import numpy as np
      
      x = np.array([0, 1, 2])
      sinh_result = np.sinh(x)
      cosh_result = np.cosh(x)
      tanh_result = np.tanh(x)
      print("sinh:", sinh_result)  # 输出: [0.         1.17520119 3.62686041]
      print("cosh:", cosh_result)  # 输出: [1.         1.54308063 3.76219569]
      print("tanh:", tanh_result)  # 输出: [0.         0.76159416 0.96402758]
      
  2. 基本运算操作符:

    • +, -, *, /: 加法、减法、乘法和除法运算符,用于数组之间的逐元素运算。

      import numpy as np
      
      x = np.array([1, 2, 3])
      y = np.array([4, 5, 6])
      
      add_result = x + y
      subtract_result = x - y
      multiply_result = x * y
      divide_result = x / y
      
      print("Addition:", add_result)       # 输出: [5 7 9]
      print("Subtraction:", subtract_result)  # 输出: [-3 -3 -3]
      print("Multiplication:", multiply_result)  # 输出: [ 4 10 18]
      print("Division:", divide_result)   # 输出: [0.25 0.4  0.5 ]
      
    • **: 幂运算符,用于将数组的每个元素提升为指定的幂次。

      import numpy as np
      
      x = np.array([2, 3, 4])
      exponent = 2
      
      result = x ** exponent
      
      print(result)  # 输出: [ 4  9 16]
      
    • np.abs(x): 计算数组x中每个元素的绝对值。

      import numpy as np
      
      x = np.array([-1, -2, 3])
      
      result = np.abs(x)
      
      print(result)  # 输出: [1 2 3]
      
    • np.sign(x): 返回数组x中每个元素的符号,大于0返回1,等于0返回0,小于0返回-1。

      import numpy as np
      
      x = np.array([-1, 0, 1])
      
      result = np.sign(x)
      
      print(result)  # 输出: [-1  0  1]
      
    • np.floor(x): 计算数组x中每个元素的向下取整结果。

      import numpy as np
      
      x = np.array([1.5, 2.7, 3.2])
      
      result = np.floor(x)
      
      print(result)  # 输出: [1. 2. 3.]
      
    • np.ceil(x): 计算数组x中每个元素的向上取整结果。

      import numpy as np
      
      x = np.array([1.5, 2.7, 3.2])
      
      result = np.ceil(x)
      
      print(result)  # 输出: [2. 3. 4.]
      
    • np.round(x): 计算数组x中每个元素的四舍五入结果。

      import numpy as np
      
      x = np.array([1.5, 2.7, 3.2])
      
      result = np.round(x)
      
      print(result)  # 输出: [2. 3. 3.]
      
  3. 聚合函数:

    • np.sum(x): 计算数组x所有元素的和。

      import numpy as np
      
      x = np.array([1, 2, 3])
      
      result = np.sum(x)
      
      print(result)  # 输出: 6
      
    • np.mean(x): 计算数组x所有元素的平均值。

      import numpy as np
      
      x = np.array([1, 2, 3])
      
      result = np.mean(x)
      
      print(result)  # 输出: 2.0
      
    • np.max(x), np.min(x): 计算数组x中的最大值和最小值。

      import numpy as np
      
      x = np.array([1, 2, 3])
      
      max_value = np.max(x)
      min_value = np.min(x)
      
      print("Max:", max_value)  # 输出: 3
      print("Min:", min_value)  # 输出: 1
      
    • np.std(x): 计算数组x所有元素的标准差。

      import numpy as np
      
      x = np.array([1, 2, 3])
      
      result = np.std(x)
      
      print(result)  # 输出: 0.816496580927726
      
    • np.var(x): 计算数组x所有元素的方差。

      import numpy as np
      
      x = np.array([1, 2, 3])
      
      result = np.var(x)
      
      print(result)  # 输出: 0.6666666666666666
      

Numpy随机数模块

  1. 生成随机数:

    • np.random.rand(d0, d1, ..., dn): 生成指定维度的[0, 1)之间均匀分布的随机数。

      import numpy as np
      
      # 生成一个2x3的随机数组
      random_array = np.random.rand(2, 3)
      print(random_array)
      
    • np.random.randn(d0, d1, ..., dn): 生成指定维度的标准正态分布(平均值为0,方差为1)的随机数。

      import numpy as np
      
      # 生成一个2x3的随机数组
      random_array = np.random.randn(2, 3)
      print(random_array)
      
    • np.random.randint(low, high=None, size=None, dtype=int): 生成指定范围内的整数随机数。

      import numpy as np
      
      # 生成一个1到10之间的整数随机数
      random_number = np.random.randint(1, 11)
      print(random_number)
      
  2. 生成随机数组:

    • np.random.random(size=None): 生成指定形状的[0, 1)之间均匀分布的随机数组。

      import numpy as np
      
      # 生成一个2x3的随机数组
      random_array = np.random.random((2, 3))
      print(random_array)
      
    • np.random.randn(d0, d1, ..., dn): 生成指定形状的标准正态分布(平均值为0,方差为1)的随机数组。

      import numpy as np
      
      # 生成一个2x3的随机数组
      random_array = np.random.randn(2, 3)
      print(random_array)
      
    • np.random.randint(low, high=None, size=None, dtype=int): 生成指定范围内的整数随机数组。

      import numpy as np
      
      # 生成一个2x3的随机整数数组,取值范围为1到10
      random_array = np.random.randint(1, 11, size=(2, 3))
      print(random_array)
      
  3. 随机抽样:

    • np.random.choice(a, size=None, replace=True, p=None): 从给定的一维数组中进行有放回或无放回抽样。

      import numpy as np
      
      # 从[1, 2, 3, 4, 5]中有放回地抽取3个数
      random_sample = np.random.choice([1, 2, 3, 4, 5], size=3, replace=True)
      print(random_sample)
      
    • np.random.shuffle(x): 随机打乱数组的顺序。

      import numpy as np
      
      x = np.array([1, 2, 3, 4, 5])
      np.random.shuffle(x)
      print(x)
      
    • np.random.permutation(x): 返回一个随机排列数组的副本(复制版本)。

      import numpy as np
      
      x = np.array([1, 2, 3, 4, 5])
      random_permutation = np.random.permutation(x)
      
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值