NumPy库的一些主要特点:
使用NumPy创建数组时,有多种方便的方法可供选择。以下是一些常用的数组创建方法以及相应的示例:
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]
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.]]
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.]]
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]
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库中创建数组的几种常用方法,还有其他更多的方法可供使用。您可以根据自己的需求选择合适的方法来创建数组。
广播的规则如下:
广播功能可以通过简单的示例来理解。
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中非常实用的一个特性,它允许我们对形状不同的数组进行运算,从而简化了代码并提高了效率。在使用广播功能时需要注意其规则,并小心处理数据类型和形状不一致的情况
数学函数:
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]
基本运算操作符:
+
, -
, *
, /
: 加法、减法、乘法和除法运算符,用于数组之间的逐元素运算。
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.]
聚合函数:
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
生成随机数:
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)
生成随机数组:
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)
随机抽样:
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)