一、nparray多维数组对象
1. 生成列表
np.array(list)
# 将输入的数据转化为ndarry类型,list可以为列表,数组,元组类型
np.asarray(list)
# 与np.array()没什么大的区别
numpy.arange([ start,] stop,[ step,] dtype = None)
"""
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
起点的值是闭区间,终点的值是开区间
""
2. 生成矩阵
np.random.randn(2, 3)
# 生成一个符合正态分布的2×3的数组,randn(d1,d2,d3...)可以继续指定维度
np.random.rand(2, 3)
# 同理生成一个2×3的数组,不过范围限定为[0, 1):包含0,不包含1
np.ones(d1, d2, ...)
# 生成一个全为1的多维矩阵
np.ones_like(x)
# 根据矩阵x的维度,生成全为1的多维矩阵
np.zeros(d1, d2, ...)
np.zeros_like(x)
# 与前面的ones()函数类似,不过生成全为0的矩阵
np.empty(d1, d2, ...)
np.empty_like(x)
# 生成无初始值的矩阵,但并不安全,可能返回未初始化的垃圾值
np.full(shape, fill_value, dtype=None, order='C')
"""
shape:int 或者 int元组。这里的shape,如果是多维,记得用括号括起来。
fill_value:填充到数组中的值
"""
numpy.full_like(a, fill_value, dtype=None, order='K', subok=True)[source]
"""
参数:
a : array_like,用a的形状和数据类型,来定义返回数组的属性。
fill_value : 标量,数组中元素的值
dtype : 数据类型, 可选。覆盖结果的数据类型。
"""
numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
# 返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.
np.identity(n,dtype=None)
# 只能创建方阵
3. Numpy的数组运算
-
带有标量计算的算术操作,会把计算参数传递给数组的每一个元素。
arr = np.arange(10) 1 / arr arr * 0.5 # 会对arr中每一个元素进行运算
4. 索引和切片
-
数组的切片都是原数组的视图,这意味着数组并不是被复制了,任何对于视图的修改最后都会反映到原数组上。
arr[:2, 1:] # 取前2行(包含第0,1行),第1列之后的值(从第1列开始,而不是第二列) # 这里的行列都是从0开始的,仍然遵循起点都是闭合,终点都是开区间。
-
布尔索引:数组的比较操作都是可以量化的
names = np.array['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'] names = 'Bob' # 会得到一个Bool类型的数组 # 这个Bool类型的数组,可以放到其他数组作为索引,来提取对应位置为True的元素 data = np.random.randn(7, 4) data[names = 'Bob', 3] """ 当然如果想提取除了'Bob'外的元素,可以用names != 'Bob',或者: cond = names == 'Bob' data[~cond] """ # 还可以用两个或者多个组合来限制条件 mask = (names == 'Bob')|(names == 'Will') # 使用Bool数组作为索引时,生成的都是拷贝数据 # Python的关键词and和or对Bool数组没有用,请使用&(and)和|(or)
-
神奇的索引
arr = np.empty((8,4)) for i in range(8): arr[i] = i # 这里相当于给每一行赋值,所赋的值也是一样的 arr([1, 5, 7, 2], [0, 3, 1, 2]) # 这里是进行取值,行列会一一对应 # 共取了4个值,对应位置分别为:(1, 0), (5, 3), (7, 1), (2, 2)
5. 数组转置和转轴
arr = np.arange(15).reshape((3,5))
arr.T
# 进行转置
arr.transpose(1, 0)
# 如果不带参数,作用就是转置
"""
(1)对于二维数组,例如我们要取arr第0行第2列的数据,我们用arr[0][2],那么这里的[0]指代第0维度,[2]指代第1维度。
(2)arr.transpose(1, 0)的作用就是将arr中的数据所处的维度进行变换,即原来第0维度变为第1维度,第1维度变为第0维度;在二维数组中等价于转置。令data = arr[0][2],经过transpose(1, 0)处理后,那么arr[2][0] = data。显然,如果是arr.transpose(0, 1),就相当于啥也没做咯
(3)如果是3维数组,同理了。arr[1][2][3],[1]处于第0维度,[2]处于第1维度,[3]处于第2维度。
语句arr.transpose(1, 0, 2)就是将第1维度和第0维度进行调换咯。
"""
arr.swapaxes(1, 2)
# swapaxes()作用就是交换2个维度,作用于transpose一样;不过一次只能交换2个维度。
# 这个必须带参数
二、numpy的通用函数
arr = np.arange(10)
# 开平方
np.sqrt(arr)
# 以e为底的指数
np.exp(arr)
np.max(a, axis=None, out=None, keepdims=False)
"""
求序列的最值,最少接受一个参数
axis默认为axis=0即列向,如果axis=1即横向
"""
np.maximum(X, Y, out=None)
"""
X和Y逐位进行比较,选择最大值;最少接受两个参数
X,Y的维度需要一致,返回的数组中每个都是X,Y中最大值。
"""
1. 一元通用函数
函数名 | 描述 |
---|---|
np.abs(ndarray) np.fabs(ndarray) | 计算绝对值 |
np.sqrt(ndarray) | 计算每个元素的平方根(等价于arr**0.5) |
np.square(ndarray) | 计算每个元素的平方(等价于arr**2) |
np.mean(ndarray) | 计算平均值 |
np.exp(ndarray) | 计算每个元素的自然对数e^x |
np.log(ndarray) np.log10(ndarray) np.log2(ndarray) np.log1p(ndarray) | 自然对数(e为底、10为底、2为底、ln(x+1)) |
np.sign(ndarray) | 符号函数 |
np.ceil(ndarray) np.floor(ndarray) np.rint(ndarray) | 计算每个元素的最高整数值,相当于[x] 计算每个元素的最小整数值,相当于[x]-1 将元素保持整数位,并保持dtype |
np.modf(ndarray) | 将数组的整数和小数部分以数组的形式返回 |
np.isnan(ndarray) | 判断数组中是否有元素为NaN,返回Bool类型 |
np.isfinite(ndarray) np.isinf(ndarray) | 判断有穷、无穷数组,返回Bool类型 |
np.cos(ndarray) np.cosh(ndarray) np.sin(ndarray) np.sinh(ndarray) np.tan(ndarray) np.tanh(ndarray) | 三角函数 |
np.arccos(ndarray) np.arccosh(ndarray) np.arcsin(ndarray) np.arcsinh(ndarray) np.arctan(ndarray) np.arctanh(ndarray) | 反三角函数 |
np.logical_not(ndarray) | 对数组的元素按位取反 |
2. 二元通用函数
函数名 | 描述 |
---|---|
np.add(arr1, arr2) | 将对应数组进行相加 |
np.subtract(arr1, arr2) | 在第二个数组中,将第一个数组中包含的元素去除 |
np.multiply(arr1, arr2) | 将数组对应元素相乘 |
np.divide(arr1, arr2) np.floor_divide(arr1, arr2) | 除或整除 |
np.power(arr1, arr2) | 将第二个数组的元素作为第一个数组对应元素的幂次方 |
np.maximum(arr1, arr2) np.fmax(arr1, arr2) | 逐个元素计算最大值(fmax忽略NaN) |
np.minimum(arr1, arr2) np.fmin(arr1, arr2) | 逐个元素计算最小值(fmin忽略NaN) |
np.mod(arr1, arr2) | 按元素的求模计算 |
np.copysign(arr1, arr2) | 将第一个数组的符号值改为第二个数组的符号值 |
np.greater(arr1, arr2) np.greater_equal(arr1, arr2) np.less(arr1, arr2) np.less_equal(arr1, arr2) np.equal(arr1, arr2) np.not_equal(arr1, arr2) | 进行逐个元素的比较,返回Bool数组。(与数组符号>、>=、<、<=、== 、!=效果一致) |
np.logical_and(arr1, arr2) np.logical_or(arr1, arr2) np.logical_xor(arr1, arr2) | 进行逐个元素的逻辑操作(与逻辑操作符&、|、^效果一致) |
3. 数学和统计方法
计算函数 | 说明 |
---|---|
ndarray.mean( axis=0 ) | 求平均值 |
ndarray.sum( axis= 0) | 求和 |
ndarray.cumsum( axis=0) ndarray.cumprod( axis=0) | 累加 累乘 |
ndarray.std() ndarray.var() | 方差 标准差 |
ndarray.max() ndarray.min() | 最大值 最小值 |
ndarray.argmax() ndarray.argmin() | 最大值索引最小值索引 |
ndarray.any() ndarray.all() | 是否至少有一个True 是否全部为True |
ndarray.dot( ndarray) | 计算矩阵内积 |
ndarray.sort(axis=0) | 排序,返回源数据 |
4. 线性代数
5. 其他函数
numpy.meshgrid
函数的基本用法
"""
用法:
[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
这里,主要以[X,Y]=meshgrid(x,y)为例,来对该函数进行介绍。
假设x是长度为m的向量,y是长度为n的向量,则最终生成的矩阵X和Y的维度都是 nm (注意不是mn)。
"""
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
m, n = (5, 3)
x = np.linspace(0, 1, m)
y = np.linspace(0, 1, n)
X, Y = np.meshgrid(x,y)
# 查看向量x和向量y
x
out:
array([ 0. , 0.25, 0.5 , 0.75, 1. ])
y
out:
array([ 0. , 0.5, 1. ])
#查看矩阵X和矩阵Y
X
out:
array([[ 0. , 0.25, 0.5 , 0.75, 1. ],
[ 0. , 0.25, 0.5 , 0.75, 1. ],
[ 0. , 0.25, 0.5 , 0.75, 1. ]])
Y
out:
array([[ 0. , 0. , 0. , 0. , 0. ],
[ 0.5, 0.5, 0.5, 0.5, 0.5],
[ 1. , 1. , 1. , 1. , 1. ]])
# 可以通过在matplotlib中进行可视化,来查看函数运行后得到的网格化数据的结果
plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()
numpy.where
函数-
np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
-
np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的
坐标
。
-
>>> arr = np.random.randn(4, 4)
>>> arr > 0
array([[False, True, True, True],
[ True, False, True, True],
[ True, False, False, False],
[False, False, False, False]])
>>> np.where(arr > 0, 3 ,-3)
array([[-3, 3, 3, 3],
[ 3, -3, 3, 3],
[ 3, -3, -3, -3],
[-3, -3, -3, -3]])
>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5) # 返回索引
(array([2, 3, 4]),)
>>> a[np.where(a > 5)] # 等价于 a[a>5]
array([ 6, 8, 10])