📅  最后修改于: 2020-04-15 05:08:50             🧑  作者: Mango
本文将帮助您熟悉Python中广泛使用的数组处理库NumPy。
什么是NumPy?
NumPy是一个通用的数组处理程序包。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。
它是使用Python进行科学计算的基本软件包。它包含各种功能,包括以下重要功能:
除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。
可以使用Numpy定义任意数据类型,它允许NumPy与各种数据库无缝且快速地集成。
安装:
pip install numpy
注意:下面讨论的所有示例都不能在在线IDE上运行。
1. NumPy中的数组: NumPy的主要对象是齐次多维数组。
范例:
[[ 1, 2, 3],
[ 4, 2, 5]]
此处,rank= 2(因为它是2维或2个轴),第一维(轴)长度= 2,第二维具有长度= 3,整体形状可以表示为:(2,3)
# Python程序演示基本数组特征
import numpy as np
# 创建数组对象
arr = np.array( [[ 1, 2, 3],
[ 4, 2, 5]] )
# 打印对象的类型
print("数组是类型: ", type(arr))
# 打印array尺寸(轴)
print("尺寸数: ", arr.ndim)
# 列印形状
print("阵列形状: ", arr.shape)
# 数组的打印大小(元素总数)
print("数组大小: ", arr.size)
# 打印数组中元素的类型
print("数组存储类型的元素: ", arr.dtype)
输出:
数组是类型:
尺寸数:: 2
阵列形状: (2, 3)
数组大小: 6
数组存储类型的元素: int6
2.数组创建:在NumPy中有多种创建数组的方法。
注意:创建数组时可以显式定义数组的类型。
# Python程序演示数组创建技术
import numpy as np
# 从类型为float的列表创建数组 a = np.array([[1, 2, 4], [5, 8, 7]], dtype = 'float')
print ("使用传递的列表创建的数组:\n", a)
# 从元组创建数组 b = np.array((1 , 3, 2))
print ("\n使用传递的元组创建的数组:\n", b)
# 创建一个全零的3X4数组 c = np.zeros((3, 4))
print ("\n用全零初始化的数组:\n", c)
# 创建复杂类型的常量值数组
d = np.full((3, 3), 6, dtype = 'complex')
print ("\n用6填充初始化的数组." "数组类型是复数:\n", d)
# 创建一个具有随机值的数组
e = np.random.random((2, 2))
print ("\n随机数组:\n", e)
# 创建一个从0到30的整数序列(步长为5)
f = np.arange(0, 30, 5)
print ("\n步长为5的顺序数组:\n", f)
# 创建一个范围为0到5的10个值的序列
g = np.linspace(0, 5, 10)
print ("\n一个序列数组,其间有10个值" "0 and 5:\n", g)
# 将3X4阵列重塑为2X2X3阵列
arr = np.array([[1, 2, 3, 4], [5, 2, 4, 2], [1, 2, 0, 1]])
newarr = arr.reshape(2, 2, 3)
print ("\n原始阵列:\n", arr) print ("重塑数组:\n", newarr)
# 展平数组 arr = np.array([[1, 2, 3], [4, 5, 6]])
flarr = arr.flatten()
print ("\n原始数组:\n", arr)
print ("展平数组:\n", flarr)
输出:
使用传递的列表创建的数组:
[[ 1. 2. 4.]
[ 5. 8. 7.]]
使用传递的元组创建的数组:
[1 3 2]
用全零初始化的数组:
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
用6填充初始化的数组. 数组类型是复数:
[[ 6.+0.j 6.+0.j 6.+0.j]
[ 6.+0.j 6.+0.j 6.+0.j]
[ 6.+0.j 6.+0.j 6.+0.j]]
随机数组:
[[ 0.46829566 0.67079389]
[ 0.09079849 0.95410464]]
步长为5的顺序数组:
[ 0 5 10 15 20 25]
一个序列数组,其间有10个值 0 and 5:
[ 0. 0.55555556 1.11111111 1.66666667 2.22222222 2.77777778
3.33333333 3.88888889 4.44444444 5. ]
原始阵列:
[[1 2 3 4]
[5 2 4 2]
[1 2 0 1]]
重塑数组:
[[[1 2 3]
[4 5 2]]
[[4 2 1]
[2 0 1]]]
原始数组:
[[1 2 3]
[4 5 6]]
展平数组:
[1 2 3 4 5 6]/* Your code... */
3.数组索引:了解数组索引的基础对于分析和操作数组对象很重要。NumPy提供了许多进行数组索引的方法。
# Python程序演示numpy中的索引编制
import numpy as np
# 示例数组 arr = np.array([[-1, 2, 0, 4], [4, -0.5, 6, 0], [2.6, 0, 7, 8], [3, -7, 4, 2.0]])
# 切片 temp = arr[:2, ::2]
print ("具有前两行和备用行的数组" "columns(0 and 2):\n", temp)
# 整数数组索引示例
temp = arr[[0, 1, 2, 3], [3, 2, 1, 0]]
print ("\n元素在索引(0, 3), (1, 2), (2, 1)," "(3, 0):\n", temp)
# 布尔数组索引示例 cond = arr > 0
# cond是一个布尔数组
temp = arr[cond]
print ("\n大于0的元素:\n", temp)
具有前两行和备用行的数组(0 and 2):
[[-1. 0.]
[ 4. 6.]]
元素在索引(0, 3), (1, 2), (2, 1),(3, 0):
[ 4. 6. 0. 3.]
大于0的元素:
[ 2. 4. 4. 6. 2.6 7. 8. 3. 4. 2. ]
4.基本操作: NumPy中提供了内置算术函数。
# Python程序演示单个数组上的基本操作
import numpy as np
a = np.array([1, 2, 5, 3])
# 给每个元素加1
print ("每个元素加1:", a+1)
# subtract 3 from each element
print ("从每个元素中减去3:", a-3)
# 每个元素乘以10
print ("每个元素乘以10:", a*10)
# 平方每个元素
print ("平方每个元素:", a**2)
# 修改现有数组
a *= 2
print ("将原始数组的每个元素加倍:", a)
# 数组转置
a = np.array([[1, 2, 3], [3, 4, 5], [9, 6, 0]])
print ("\n原始数组:\n", a)
print ("数组转置:\n", a.T)
输出:
每个元素加1: [2 3 6 4]
从每个元素中减去3: [-2 -1 2 0]
每个元素乘以10: [10 20 50 30]
平方每个元素: [ 1 4 25 9]
将原始数组的每个元素加倍: [ 2 4 10 6]
原始数组:
[[1 2 3]
[3 4 5]
[9 6 0]]
数组转置:
[[1 3 9]
[2 4 6]
[3 5 0]]
一元运算符:许多一元运算作为ndarray类的方法提供。这包括总和,最小值,最大值等。也可以通过设置轴参数来逐行或逐列应用这些功能。
# Python程序演示numpy中的一元运算符
import numpy as np
arr = np.array([[1, 5, 6],
[4, 7, 2],
[3, 1, 9]])
# 数组的最大元素
print ("最大元素是:", arr.max())
print ("按行最大元素:",
arr.max(axis = 1))
# 数组的最小元素
print ("列式最小元素:",
arr.min(axis = 0))
# 数组元素之和
print ("所有数组元素的总和:",
arr.sum())
# 每行的累计总和
print ("每一行的累计总和:\n",
arr.cumsum(axis = 1))
输出:
Largest element is: 9
Row-wise maximum elements: [6 7 9]
Column-wise minimum elements: [1 1 2]
Sum of all array elements: 38
Cumulative sum along each row:
[[ 1 6 12]
[ 4 11 13]
[ 3 4 13]]
二进制运算符:这些运算适用于元素数组,并创建一个新数组。您可以使用所有基本的算术运算符,例如+,-,/,等。对于+=,-=, =运算符,将修改现有的数组。
# Python程序在Numpy中演示二进制运算符
import numpy as np
a = np.array([[1, 2],
[3, 4]])
b = np.array([[4, 3],
[2, 1]])
# 数组相加
print ("数组总和:\n", a + b)
# 数组乘法(逐元素乘法)
print ("数组乘法:\n", a*b)
# 矩阵乘法
print ("矩阵乘法:\n", a.dot(b))
输出:
数组总和:
[[5 5]
[5 5]]
数组乘法:
[[4 6]
[6 4]]
矩阵乘法:
[[ 8 5]
[20 13]]
注意:上面我们使用重载运算符执行的所有操作都可以使用ufuncs来完成,例如np.add,np.subtract,np.multiply,np.divide,np.sum等。
# Python程序演示numpy中的通用函数
import numpy as np
# 创建一个正弦值数组
a = np.array([0, np.pi/2, np.pi])
print ("数组元素的正弦值:", np.sin(a))
# 指数值
a = np.array([0, 1, 2, 3])
print ("数组元素的指数:", np.exp(a))
# 数组值的平方根
print ("数组元素的平方根:", np.sqrt(a))
输出:
数组元素的正弦值: [ 0.00000000e+00 1.00000000e+00 1.22464680e-16]
数组元素的指数: [ 1. 2.71828183 7.3890561 20.08553692]
数组元素的平方根: [ 0. 1. 1.41421356 1.73205081]
4.排序数组:有一个简单的np.sort方法可以对NumPy数组进行排序。让我们来探讨一下。
# Python程序演示numpy排序
import numpy as np
a = np.array([[1, 4, 2],
[3, 4, 6],
[0, -1, 5]])
# 排序数组
print ("数组元素按排序顺序:\n",
np.sort(a, axis = None))
# 按行排序数组
print ("按行排序的数组:\n",
np.sort(a, axis = 1))
# 指定排序算法
print ("通过应用合并排序进行列明智排序:\n",
np.sort(a, axis = 0, kind = 'mergesort'))
# 显示结构化数组排序的示例为dtypes设置别名
dtypes = [('name', 'S10'), ('grad_year', int), ('cgpa', float)]
# 要放入数组的值
values = [('Hrithik', 2009, 8.5), ('Ajay', 2008, 8.7),
('Pankaj', 2008, 7.9), ('Aakash', 2009, 9.0)]
# 创建数组
arr = np.array(values, dtype = dtypes)
print ("\n数组按名称排序:\n",
np.sort(arr, order = 'name'))
print ("数组按毕业年份和cgpa排序:\n",
np.sort(arr, order = ['grad_year', 'cgpa']))
输出:
数组元素按排序顺序:
[-1 0 1 2 3 4 4 5 6]
按行排序的数组:
[[ 1 2 4]
[ 3 4 6]
[-1 0 5]]
通过应用合并排序进行列明智排序:
[[ 0 -1 2]
[ 1 4 5]
[ 3 4 6]]
数组按名称排序:
[('Aakash', 2009, 9.0) ('Ajay', 2008, 8.7) ('Hrithik', 2009, 8.5)
('Pankaj', 2008, 7.9)]
数组按毕业年份和cgpa排序:
[('Pankaj', 2008, 7.9) ('Ajay', 2008, 8.7) ('Hrithik', 2009, 8.5)
('Aakash', 2009, 9.0)]
因此,这是NumPy库的简短而简洁的介绍和教程。