NumPy(Numerical Python)是Python数值计算的开源扩展。该工具可用于存储和处理大型矩阵。它比Python自己的嵌套列表结构更高效。它支持多维数组和矩阵操作。此外,它还提供了大量用于数组操作的数学库。NumPy用于处理数组。
NumPy的前身Numeric最初是由Jim Hugunin和其他合作者开发的。Python本身有列表和数组,但对于大型数据处理,其结构有许多缺点。Python并不能很好地支持多维数组和矩阵,因此NumPy填补了这些空白,它提供了两个适用于这类数据的数值计算的基本对象:Ndarray和Ufunc。简而言之,NumPy是一个Python库。
NumPy能干嘛?
(1)NumPy可以帮助你研究:
- 数据科学与机器学习
- 线性代数积分插值,特殊功能
- 信号处理和图像处理
- 科学与工程计算
- 常微分方程
- 提供应用程序接口(API)
(2)学习NumPy的先决条件
在学习NumPy编程之前,您必须具备Python语言。
开始Numpy学习之旅
- 导入Numpy库
#Example 1.1
import numpy
myArr=numpy.array([0,1,2,3,4,5])
print(myArr)
# [0 1 2 3 4 5]
# import numpy 是一个NumPy命令,用于将NumPy库导入到当前程序中。
- NumPy库的别名
import numpy as np
myArr=np.array([0,1,2,3,4,5])
print(myArr)
# [0 1 2 3 4 5]
# import numpy as np定义了np作为Numpy库的别名
- Numpy数组
创建NumPy数组的两种语法是:
myArray=np.array([v1,v2,v3,…]) # 第一个语法
myArray=np.arange(v1,v2) # 第二个语法
arange(v1,v2)返回v1到v2-1的数字,例如arange(1,5)返回1,2,3,4
import numpy as np
arr1=np.array([0,1,2,3,4,5])
print(arr1)
arr2=np.arange(0,6) # 不包括6
print(arr2)
# [0 1 2 3 4 5]
# [0 1 2 3 4 5]
- 0维度的数组
0维数组称为标量,其元素只是一个值。
创建零维数组的语法如下:
myArray=np.array(value)
import numpy as np
myArray=np.array(100)
print(myArray)
# 100
- 1维数组
一维数组包含多个值。
创建一维数组的语法如下:
myArray=np.array([value1,value2,…])
import numpy as np
myArray=np.array([0,1,2,3,4,5])
print(myArray)
# [0 1 2 3 4 5]
- 2维数组
二维数组包含多个一维数组。
创建一个二维数组的语法如下:
myArray=np.array([[v1,v2,v3],[v4,v5,v6]])
import numpy as np
myArray=np.array([[0,1,2],[3,4,5]])
print(myArray)
# [[0 1 2][3 4 5]]
- 3维数组
三维数组包含多个二维数组。
创建三维数组的语法如下:
myArray=np.array([[[v1,v2,v3],[v4,v5,v6], [v7,v8,v9]]])
import numpy as np
myArr=np.array([[[0,1,2],[3,4,5],[6,7,8]]])
print(myArr)
# [[[0 1 2][3 4 5][6 7 8]]]
- 高维数组
定义更高维度数组的语法是:ndmin = number
" number "表示数组中有多少维。
import numpy as np
arr3=np.array([0,1,2,3],ndmin=3) # 定义三维数组
arr4=np.array([0,1,2,3],ndmin=4) # 定义四维数组
arr5=np.array([0,1,2,3],ndmin=5) # 定义五维数组
print(arr3)
print(arr4)
print(arr5)
# [[[0 1 2 3]]]
# [[[[0 1 2 3]]]]
# [[[[[0 1 2 3]]]]]
- 维数
检查数组的维数的语法:
myArray.ndim
import numpy as np
arr0=np.array(100) # 0维
arr1=np.array([0,1,2,3,4,5]) # 1维
arr2=np.array([[0,1,2],[3,4,5]]) # 2维
arr3=np.array([[[0,1,2],[3,4,5],[6,7,8]]]) # 3维
print(arr0.ndim)
print(arr1.ndim)
print(arr2.ndim)
print(arr3.ndim)
# 0
# 1
# 2
# 3
- 访问数组元素
我们可以使用数组下标来访问数组元素。每个数组元素都有自己的索引。数组的索引从0开始。
访问数组元素的语法是:
myArray[index]
import numpy as np
myArray=np.array([10,11,12,13,14])
print(myArray[0])
print(myArray[4])
# 10
# 14
- 计算元素的值
我们可以通过使用数组下标来计算数组元素的值。
import numpy as np
myArray=np.array([10,11,12,13,14])
print(myArray[0]+myArray[3])
print(myArray[1]*myArray[2])
# 23
# 132
- 访问2维数组
我们可以通过索引访问二维数组
一个二维数组包含多行和多列
访问二维数组的语法是:
myArray[row,col]
import numpy as np
arr=np.array([[10,11,12,13,14],[15,16,17,18,19]])
print("The value in row 0 and col 3 is:", arr[0,3])
print("The value in row 1 and col 2 is:", arr[1,2])
# The value in row 0 and col 3 is:13
# The value in row 1 and col 2 is:17
- 最后一个索引
我们可以用“-1”表示最后一个索引。
myArray[-1,-1] # 访问最后一行和最后一列
import numpy as np
arr=np.array([[10,11,12,13,14],[15,16,17,18,19]])
print("The value in row 0 and last col is:", arr[0,-1])
print("The value in last row and col 2 is:", arr[-1,2])
print("The value in last row and last col is:", arr[-1,-1])
# The value in row 0 and last col is:14
# The value in row 0 and last col is:17
# The value in row 0 and last col is:19
- NumPy切片
我们可以获取从一个索引到另一个索引的一部分元素:[start🔚step]
end的值为index-1。默认step为1
import numpy as np
arr=np.array([10,11,12,13,14,15,16,17,18])
print(arr[2:7:2])
print(arr[2:7])
# [12 14 16]
# [12 13 14 15 16])
- 在默认情况下切片
在[start: end: step]中,默认值为:
start默认值为0
end默认值为最后的索引(-1)的下一个索引
step默认为1
import numpy as np
arr=np.array([10,11,12,13,14,15,16,17,18])
print(arr[:3])
print(arr[2:])
# [10 11 12]
# [12 13 14 15 16 17]
- 负切片
负切片是指从最后引用索引arr[-index1:-index2]
访问从-index1到-index2-1的元素,从末尾引用索引。
import numpy as np
arr=np.array([10,11,12,13,14,15,16,17,18])
print(arr[-5:-2])
print(arr[-7:-3])
# [14 15 16]
# [12 13 14 15]
- 2D切片
2D切片的第一个语法是:
myArray[row1:row2,col1:col2]
访问从row1到rpw2-1和从col1到col2-1的元素
import numpy as np
arr=np.array([[10,11,12,13,14],[15,16,17,18,19]])
print(arr[0:2,2:4])
# [[12 13][17 18]]
2D切片的第二个语法是:
myArray[row1,col1:col2]
访问指定行(row1),列从col1到col2-1的元素
import numpy as np
arr=np.array([[10,11,12,13,14],[15,16,17,18,19]])
print(arr[0,2:4])
# [12 13]
2D切片的第三个语法是:
myArray[row1:row2,col1]
访问指定列col1,行从row1到row2-1的元素
import numpy as np
arr=np.array([[10,11,12,13,14],[15,16,17,18,19]])
print(arr[0:2,2])
# [12 17]
-
NumPy的数据类型
-
类型码
每个NumPy数据类型都有自己的类型码。例如:
int64的类型码为“i8”,字符串的类型代码为“S”或“|S”
-
数据类型检查
数据类型检查的语法是:myArray.dtype
import numpy as np
arr1=np.array([10,11,12,13])
print(arr1.dtype)
arr2=np.array(['Matlab','in','8','Hours'])
print(arr2.dtype)
# int64
# <U6
代码解析:
arr1.dtype和arr2.dtype返回数组的数据类型
int64表示64位整数类型
<U6表示每个无符号字符串在这个数组中不超过6个字符(Matlab in 8 Hours)。
- 设置字符串数组
设置数组数据类型的语法:
dtype=“datatype”
import numpy as np
myArr=np.array([10,20,30,40],dtype="S")
print(myArr.dtype)
# |S2
代码解析
dtype='S’设置数组的数据类型为字符串
" | "符号表示这里不适用使用字节顺序符号。
“S2”表示数组数据类型为String,每个元素的大小为2字节。
- 设置Int数组
设置数组数据类型的语法:
dtype=“datatype”
import numpy as np
nyArr=np.array([10,11,12,13],dtype="i2")
print(myArr.dtype)
# int16
代码解析:
dtype='i2’设置数组的数据类型为int16
'i2’是int16的类型码
- 数据类型转换
转换数组数据类型的语法
myArr.astype(‘data_type’)
# astype('i')将数组转换成整数类型
import numpy as np
myArr=np.array([0.99,0.88,0.23,2.99])
arr=myArr.astype('i')
print(arr)
print(arr.dtype)
# [0 0 0 2]
# int32
# astype(bool)将数组转换成bool类型
import numpy as np
myArr=np.array([0,1,2,3])
arr=myArr.astype(bool)
print(arr)
print(arr.dtype)
# [False True True True]
# bool
- 数组拷贝
数组拷贝的语法是:array2=array1.copy()
import numpy as np
arr1=np.array([0,1,2,3,4])
arr2=arr1.copy()
arr2[0]=100
print(arr1)
print(arr2)
# [0 1 2 3 4]
# [100 1 2 3 4]
代码解析:
将arr1数组拷贝到数组arr2
arr1与arr2相互不影响
- 数组的视图
创建数组视图的语法:array2=array1.view()
import numpy as np
arr1=np.array([0,1,2,3,4])
arr2=arr1.view()
arr2[0]=100
print(arr1)
print(arr2)
# [100 1 2 3 4]
# [100 1 2 3 4]
代码解析:
创建arr1数组视图arr2
arr1与arr2相互影响
- 检查相关函数
“array.base"可以检查新数组和旧数组的相关性。
如果newArray是从oldArray复制过来的,那么” newArray.base将返回“None”。
如果newArray是oldArray的视图,则" newArray.base"将返回一个新的数组。
import numpy as np
myArr=np.array([0,1,2,3,4])
copyArr=myArr.copy()
viewArr=myArr.view()
print(copyArr.base)
print(viewArr.base)
# None
# [0 1 2 3 4]
- 数组的shape
数组形状是指数组中有多少行和多少列。语法为:array.shape
import numpy as np
myArr=np.array([[0,1,2,3],[4,5,6,7],[2,4,6,8]])
print(myArr.shape)
# (3, 4)
# myArr.shape返回一个(3,4),这表示“myArr”有3行和4列。
myArr=np.array([1,2,3,4,5],ndim=2)
print(myArr)
print("The array shape is:", myArr.shape)
# [[1 2 3 4 5]]
# The array shape is:(1,5)
# ndmin=2表示建立一个二维数组
# myArr.shape返回一个(1,5),这表示“myArr”有1行和5列。
- reshape从1D到2D
数组reshape意味着修改数组的shape
reshape从1D到2D的语法是:2dArray=1dArray.reshape(rows,cols)
import numpy as np
myArr=np.array([0,1,2,3,4,5,6,7,8,9,10,11])
newArr=myArr.reshape(3,4)
print(newArr)
# [[0 1 2 3][4 5 6 7][8 9 10 11]]
# myArr.reshape(3,4)表示把1D数组reshape成2d数组,“myArr”有3行和4列。
数组reshape的要求是:原始数组中的元素个数必须等于维度的乘积。
- 未知维度
如果在reshape方法中没有为其中一个维度指定确切的数字,则可以使用“-1”作为参数。NumPy会自动计算这个数字。三个语法是:
arr.reshape(-1,rows,cols)
arr.reshape(layer,-1,cols)
arr.reshape(layer,rows,-1)
import numpy as np
myArr=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
newArr=myArr.reshape(-1,2,3)
print(newArr)
# [[[1 2 3][4 5 6]][[7 8 9][10 11 12]]]
- Flatten数组
flatten数组意味着将多维数组reshape到1d数组
将数组reshape到1d数组的语法是:
myArr.reshape(-1)
import numpy as np
myArr=np.array([[1,2,3],[4,5,6],[7,8,9]])
newArr=myArr.reshape(-1)
print(newArr)
# [1 2 3 4 5 6 7 8 9]
代码解析:
myArr是一个2D数组
myArr.reshape(-1)使用-1参数reshape2D数组为1D数组
- 1D数组迭代
遍历一维数组的语法是:
for num in myArray
import numpy as np
myArr=np.array([10,11,12])
for num in myArr:
print(num)
# 10
# 11
# 12
- 迭代二维数组
遍历二维数组的语法是:
for num in myArray
import numpy as np
myArr=np.array([[10,11,12],[13,14,15]])
for num in myArr:
print(num)
# [10 11 12]
# [13 14 15]
- 迭代三维数组
遍历三维数组的语法是:
for num in myArray
import numpy as np
myArr=np.array([[[10,11,12],[13,14,15]],[[16,17,18],[19,20,21]]]
for num in myArr:
print(num)
# [[10,11,12],[13,14,15]]
# [[16,17,18],[19,20,21]]
- nditer()
要获得每个实际的元素值(标量),可以使用niter()来遍历数组中的所有元素。语法是:nditer(myArray)
import numpy as np
myArr=np.array([[10,11],[12,13]])
for num in np.nditer(myArr):
print(num)
# 10
# 11
# 12
# 13
- 使用step来遍历
使用step来遍历主要用于二维数组,语法为:
nditer(myArr[:,::step])
import numpy as np
myArr=np.array([[10,11,12,13],[14,15,16,17]])
for num in np.nditer(myArr[:,::2]):
print(num)
# 10
# 12
# 14
# 16
- 列举数组
可以为数组中的每个元素指定序号。ndenumerate(myArray)
import numpy as np
myArr=np.array([0,1,2,3])
for id,num in np.ndenumerate(myArr):
print(id,num)
# (0,) 0
# (1,) 1
# (2,) 2
# (3,) 3
- 数组连接
连接数组是指将两个或多个数组的元素连接到一个数组中。连接数组的语法为:np.concatenate((arr1,arr2))
import numpy as np
a1=np.array([0,1,2])
a2=np.array([3,4,5])
myArr=np.concatenate((a1,a2))
print(myArr)
# [0 1 2 3 4 5]
# np.concatenate((a1,a2))将数组a1和a2连接成单一数组
- 根据坐标轴进行连接
当连接两个数组时候,使用参数axis来表示连接维度
axis=0,垂直方向连接
axis=1,水平方向连接
import numpy as np
a1=np.array([[11,12,13],[14,15,16]])
a2=np.array([[21,22,23],[24,25,26]])
myArr=np.concatenate((a1,a2),axis=0)
print(myArr)
# [[11 12 13][14 15 16][21 22 23][24 25 26]]
myArr2=np.concatenate((a1,a2),axis=1)
print(myArr2)
# [[11 12 13 21 22 23][14 15 16 24 25 26]]
# axis默认是0
- 根据坐标轴进行堆叠
stack()可以连接两个数组,但它将两个一维数组连接为一个二维数组,并将两个二维数组连接为一个三维数组。语法为:
np.stack((array1,array2),axis=0)
np.stack((array1,array2),axis=1)
a1=np.array([[11,12,13],[14,15,16]])
a2=np.array([[21,22,23],[24,25,26]])
myArr=np.stack((a1,a2),axis=0)
print(myArr)
# [[[11,12,13],[14,15,16]], [[21,22,23],[24,25,26]]]
myArr2=np.stack((a1,a2),axis=1)
print(myArr2)
# [[[11,12,13],[21,22,23]], [[14,15,16],[24,25,26]]]
# “np.Stack((a1, a2),axis=1) "水平连接两个数组,因为参数" axis=1 "。
- 垂直连接数组
vstack()垂直连接数组,语法是:
np.vstack((arr1,arr2))
import numpy as np
a1=np.array([[11,12,13],[14,15,16]])
a2=np.array([[21,22,23],[24,25,26]])
myArr=np.vstack((a1,a2))
print(myArr)
# [[[11,12,13],[14,15,16]], [[21,22,23],[24,25,26]]]
- 水平连接数组
hstack()垂直连接数组,语法是:
np.hstack((arr1,arr2))
import numpy as np
a1=np.array([[11,12,13],[14,15,16]])
a2=np.array([[21,22,23],[24,25,26]])
myArr=np.hstack((a1,a2))
print(myArr)
# [[11 12 13 21 22 23][14 15 16 24 25 26]]
- 1D数组连接为3D数组
语法是:np.dstack((arr1,arr2))
默认情况下,是水平连接
import numpy as np
a1=np.array([11,12,13])
a2=np.array([14,15,16])
myArr=np.dstack((a1,a2))
print(myArr)
# [[[11 14][12 15][13 16]]]
- 2D数组连接为3D数组
语法是:np.dstack((arr1,arr2))
默认情况下,是水平连接
import numpy as np
a1=np.array([[11],[12],[13]])
a2=np.array([[14],[15],[16]])
myArr=np.dstack((a1,a2))
print(myArr)
# [[[11 14][[12 15]][[13 16]]]
- 数组排序
语法是:np.sort(array)
myArr = np.array([[ 2, 0, 3, 9], [ 7, 5, 6, 4 ]])
print(np.sort(myArr))
# [[0, 2, 3, 9], [4, 5, 6, 7]]
- 拆分数组
拆分数组就是将一个数组分成几个数组
语法是:array_split(array,number)
参数number意思是拆分成多少个数组
import numpy as np
myArr=np.array([10,20,30,40,50,60])
arr=np.array_split(myArr,3)
print(arr)
# [array([10, 20]), array([30, 40]), array([50, 60])]
myArr2=np.array([10,20,30,40,50,60,70])
arr2=np.array_split(myArr2,3)
print(arr2)
# [array([10, 20, 30]), array([40, 50]), array([60, 70])]
- 访问拆分后的数组
语法是:arr[index]
import numpy as np
myArr=np.array([10,20,30,40,50,60])
arr=np.array_split(myArr,3)
print(arr)
print(arr[0])
print(arr[1])
print(arr[2])
# [array([10, 20]), array([30, 40]), array([50, 60])]
#[10 20]
#[30 40]
#[50 60]
- 拆分二维数组
语法是:array_split(array,number)
参数number意思是拆分成多少个数组
import numpy as np
myArr=np.array([[1,2],[3,4],[5,6],[7,8]])
arr=np.array_split(myArr,2)
print(arr)
# [array([[1, 2], [3, 4]]), array([[5, 6],[7, 8]])]
- 垂直分拆
语法是:vsplit(array,number)
参数number意思是拆分成多少个数组
import numpy as np
myArr=np.array([[1,2],[3,4],[5,6],[7,8]])
arr=np.vsplit(myArr,2)
print(arr)
#[array([[1, 2],
# [3, 4]]), array([[5, 6],
# [7, 8]])]
- 水平分拆
import numpy as np
myArr=np.array([[1,2],[3,4],[5,6],[7,8]])
arr=np.hsplit(myArr,2)
print(arr)
# [array([[1],[3],[5],[7]]),
#array([[2], [4], [6], [8]])]
- 找到数组索引
我们可以通过元素值找到匹配的索引,并返回一个包含匹配索引的新数组。
语法是:where(array==value)
import numpy as np
myArr=np.array([0,93,2,93,4,5,93])
arr=np.where(myArr==93)
print(arr)
# (array([1, 3, 6], dtype=int64),)
# 奇数偶数
even=np.where(myArr%2==0)
print(even)
odd=np.where(myArr%2==1)
print(odd)
# (array([0, 2, 4], dtype=int64),)
# (array([1, 3, 5, 6], dtype=int64),)
- 搜索位置索引
语法1:searchsorted(array,value)
语法2:searchsorted(array,[v1,v2,v3,…])
import numpy as np
myArr=np.array([24,35,46,57,68])
arr1=np.searchsorted(myArr,45)
arr2=np.searchsorted(myArr,47)
print(arr1)
print(arr2)
# 2
# 3
# searchsorted(myArr,45)发现45应该放置的索引值,即使45不在数组中
arr=np.searchsorted(myArr,[15,45,65])
print(arr)
# [1 6 6]
- 使用bool值过滤数组
我们可以使用布尔值来过滤数组中的元素。
如果该值为true,则将显示元素。
如果值为false,则不会显示元素。
import numpy as np
myArr=np.array([0,1,2,3,4,5])
arr=myArr[[True, False, True, False, False, True]]
print(arr)
# [0 2 5]
- 根据条件过滤数组
我们可以使用条件来过滤数组的元素。
如果值满足条件,将显示元素。
如果值不满足条件,则不会显示元素。
import numpy as np
myArr=np.array([0,1,2,3,4,5])
filter=myArr>=2
arr=myArr[filter]
print(filter)
print(arr)
# [False False True True True True]
#[2 3 4 5]
- NumPy ufuncs
ufuncs意思是通用函数,实际上是NumPy函数。利用“ufuncs”实现向量化,快速运行NumPy程序。我们可以将“ufunc”视为NumPy内置函数。
import numpy as np
list1=[10,20,30,40]
list2=[80,70,60,50]
list3=np.add(list1,list2) # add() is a NumPy ufunc
print(list3)
# [90 90 90 90]
- 检查NumPy ufunc
语法:type(np.function_name)
如果返回 <class ‘numpy.ufunc’>,则表示是一个ufunc
import numpy as np
print(type(np.add))
print(type(np.subtract))
print(type(np.multiply))
print(type(np.divide))
# <class 'numpy.ufunc'>
# <class 'numpy.ufunc'>
# <class 'numpy.ufunc'>
# <class 'numpy.ufunc'>
- 创建自己的ufunc
创建自己的ufunc的步骤如下:
1.定义普通的Python函数
2.将定义好的函数添加到NumPy的ufunc库,语法是:frompyfunc(myFunction,number1,number2)
number1:输入参数个数
number2:输出参数个数
import numpy as np
def myMultiply(a,b):
return a*b
myMultiply=np.frompyfunc(myMultiply,2,1)
print(myMultiply([0,1,2,3,4],[5,6,7,8,9]))
# [0 6 14 24 36]
- 算术ufunc
import numpy as np
arr1=np.array([10,20,30])
arr2=np.array([1,2,3])
a=np.add(arr1,arr2)
s=np.subtract(arr1,arr2)
m=np.multiply(arr1,arr2)
d=np.divide(arr1,arr2)
p = np.power(arr1, arr2)
m = np.mod(arr1, arr2)
r = np.remainder(arr1, arr2)
print(a)
print(s)
print(m)
print(d)
print(p)
print(m)
print(r)
# [11 22 33]
#[ 9 18 27]
#[10 40 90]
#[10. 10. 10.]
#[10 400 27000]
#[0 0 0]
#[0 0 0]
- trunc()&fix()
trunc()&fix()删除小数点并返回最接近零的数字.
语法:
trunc([floating_numbers])
fix([floating_numbers])
import numpy as np
t = np.trunc([-2.7, 2.7])
f = np.fix([-2.7,2.7])
print(t)
print(f)
# [-2.,2.]
# [-2.,2.]
- around(),ceil(),floor()
around()返回四舍五入的值
ceil()返回一个大于自身的最小整数
floor()返回小于自身的最大整数
import numpy as np
a=np.around(7.555,2) # 2表示保留两位有效数字
c=np.ceil(7.555)
f=np.floor(7.555)
print(a)
print(c)
print(f)
# 7.56
# 8.0
# 7.0
- log2(),log(),log()
import numpy as np
arr=np.arange(1,4)
print(np.log2(arr))
print(np.log10(arr))
print(np.log(arr)) # 以e为底
# [0. 1. 1.5849625]
# [0. 0.30103 0.47712125]
# [0. 0.69314718 1.09861229]
- 以任何数字为底的log
form math import log
log(number,base)
from math import log
import numpy as np
print(log(16,4))
# 2
- 数组求和
我们可以得到多个数组中所有元素值的和。sum([array1,array2,array3])
import numpy as np
a1=np.array([10,20,30])
a2=np.array([10,20,30])
a3=np.array([10,20,30])
myArr=np.sum([a1,a2,a3])
print(myArr)
# 180
- 求和 & axis=0
参数" axis=0 "可以使NumPy垂直求和多个数组中的元素值。
import numpy as np
a1=np.array([10,20,30])
a2=np.array([10,20,30])
myArr=np.sum([a1,a2],axis=0)
print(myArr)
# [20 40 60]
- 求和 & axis=1
参数" axis=1 "可以使NumPy水平求和多个数组中的元素值。
import numpy as np
a1=np.array([10,20,30])
a2=np.array([10,20,30])
myArr=np.sum([a1,a2],axis=1)
print(myArr)
# [60 60]
- 累加和
import numpy as np
myArr=np.array([10,20,30,40])
arr=np.cumsum(myArr)
print(arr)
# [10 30 60 100]
# 计算过程[ (10) (10+20) (10+20+30) (10+20+30+40) ]
- 数组的差分
计算规则:下一个元素-上一个元素
import numpy as np
myArr=np.array([3,5,7,8])
arr=np.diff(myArr)
print(arr)
# [2 2 1]
- 多次差分
语法:diff(myArr,n=number)
参数number是差分的次数
import numpy as np
myArr=np.array([2,5,6,8])
arr=np.diff(myArr,n=2)
print(arr)
# [-2 1]
# diff(myArr,n=2)返回数组myArr经过两次差分后的结果
- 数组的乘积
import numpy as np
myArr=np.array([10,20,30,40])
num=np.prod(myArr)
print(num) # 240000=10*20*30*40
# np.prod(myArr)返回myArr数组中所有元素的乘积
- 多个数组的乘积
我们可以得到多个数组中所有元素值的乘积。
import numpy as np
myArr1=np.array([10,20])
myArr2=np.array([30,40])
num=np.prod([myArr1,myArr2])
print(num) # 240000=10*20*30*40
- product & axis=0
import numpy as np
myArr1=np.array([10,20])
myArr2=np.array([30,40])
num=np.prod([myArr1,myArr2],axis=0)
print(num)
# [300 800]
- product&axis=1
import numpy as np
myArr1=np.array([10,20])
myArr2=np.array([30,40])
num=np.prod([myArr1,myArr2],axis=1)
print(num)
# [200 1200]
- Cumulative Product
import numpy as np
myArr = np.array([1, 2, 3, 4])
arr = np.cumprod(myArr)
print(arr)
# [ 1 2 6 24]
# [ (1) (1X2) (1X2X3) (1X2X3X4) ]
- 数组的商
import numpy as np
arr=np.arange(2,7)
print(divmod(arr,2))
# 商,余数
# (array([1, 1, 2, 2, 3], dtype=int32), array([0, 1, 0, 1, 0], dtype=int32))
- 最小公倍数
Lowest Common Multiple(LCM)
import numpy as np
myArr=np.array([2,7,8])
num=np.lcm.reduce(myArr)
print(num)
# 56
- 最大公约数
Greatest Common Divisor(GCD)
import numpy as np
myArr=np.array([12,6,21,9,24])
num=np.gcd.reduce(myArr)
print(num)
# 3
计算过程
12/3=4, 6/3=2, 21/3=7, 9/3=3, 24/3=8.
- 重新排列数组
有两种方法可以随机重新排列数组的元素序列:
random.permutation(array)
random.shuffle(array)
两个函数的区别是:" permutation() “只改变数组的副本。” shuffle() "改变原始数组。
from numpy import random
import numpy as np
myArr=np.array([1,2,3,4,5])
arr=random.permutation(myArr)
print(arr)
random.shuffle(myArr)
print(myArr)
# [1 4 2 3 5]
#[3 5 2 4 1]