Python Numpy详解

Posted Chandler_river

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Numpy详解相关的知识,希望对你有一定的参考价值。

  • 数组

    • 6个常见函数
      • arange(起始值,终止值,步长)
      • zeros/ones(shape)
      • empty(shape)分配一段内存,但不赋值.一般就像是一些随机的噪音
      • linspace(下限,上限,项数)和logspace(下限(指数),上限(指数),项数,base=?(default = 10))
    • 修改数组的shape属性
import numpy as np

a = np.arange(6)
b = np.zeros(4)
c = np.ones((2,3))
d = np.empty(4)

>>>array([0, 1, 2, 3, 4, 5])
>>>array([0., 0., 0., 0.])
>>>array([[1., 1., 1.],
       [1., 1., 1.]])
>>>array([7.08703453e-312, 7.08703453e-312, 7.08703453e-312, 7.08703478e-312])


f = np.linspace(5,10,10)
>>>array([ 5.        ,  5.55555556,  6.11111111,  6.66666667,  7.22222222,
        7.77777778,  8.33333333,  8.88888889,  9.44444444, 10.        ])

g = g = np.logspace(1,-1,3)
>>>g
>>>g = np.logspace(1,-1,3)


a.shape = (2,3)
>>>a
>>>array([[0, 1, 2],
       [3, 4, 5]])
  • data type(数据类型)

>>>a = np.array([1,2,3,4,5,6])
>>>a.dtype
>>>dtype('int32')
>>>
>>>b = np.array([1.,2.,3.,4.,5.,6.])
>>>b.dtype
>>>dtype('float64')
  • 切片和视图

    •   切片操作
a = np.arange(8)

a[::-1]
array([7, 6, 5, 4, 3, 2, 1, 0])
a[2:6]
array([2, 3, 4, 5])
a[1::3]
array([1, 4, 7])
  •          数组切片的一个重要特性是,数组切片是原始数组的视图,也就是数组切片操作并没有复制数据,例:
a = np.arange(6)
b = a[1::2]
b[0] = 99
print(b)
print(a)


>>>[99  3  5]
[ 0 99  2  3  4  5]

  • 算术和广播

                数组的算术

a = np.arange(6)
a - 1
>>>array([-1,  0,  1,  2,  3,  4])
a + a
>>>array([ 0,  2,  4,  6,  8, 10])
2*a + 1
>>>array([ 1,  3,  5,  7,  9, 11])

                用数组的算术方法表示导数

(y[1:]-y[:1])/(x[1:]-x[:1])
#或者
np.gradient(y)/np.gradient(x)

                Numpy可以将不同形状的数组一起广播(就像是自动扩展)

                当两个数组中的两个轴的秩相等时,这两个元素之间的操作是逐元素计算的 

                当数组a上的轴的长度为1且数组b上的相同轴的长度大于1时,a的值在该维度上延伸

例如

a = np.arange(4)
a.shape = (2,2)
b = np.array([[100],[1000]])
a * b
>>>
array([[0,100],[2000,3000]])


a = np.array(12)
a.shape = (4,3)
b = np.array([10,100,1000])
a + b
>>>array([
[10,101,1002],
[13,104,1005],
[16,107,1008],
[19,110,1011]])

  • 花式索引

        获取许多任意索引的数据,获取某种符合某种模式的索引但索引不够规则

花式索引的举例

        

>>>a = 2*np.arange(8)**2 + 1
>>>a
>>>array([ 1,  3,  9, 19, 33, 51, 73, 99], dtype=int32)
>>>a[[3,-1,1]]
>>>array([19, 99,  3], dtype=int32)

>>>fib = np.array([0,1,1,2,3,5])
>>>a[fib]
>>>array([ 1,  3,  3,  9, 19, 51], dtype=int32)

>>>b = a[[[[2,7],[3,4]]]]
>>>[[ 9 99]
 [19 33]]

不能在一个维度中混合使用切片和花式索引

>>>a = np.arange(16)-8
>>>a.shape = (4,4)
>>>a
>>>array([[-8, -7, -6, -5],
       [-4, -3, -2, -1],
       [ 0,  1,  2,  3],
       [ 4,  5,  6,  7]])
>>>a[:,[2,-1,0]]
>>>array([[-6, -5, -8],
       [-2, -1, -4],
       [ 2,  3,  0],
       [ 6,  7,  4]])
>>>fib = np.array([0,1,1,2,3])
>>>a[fib,::-2]
>>>array([[-5, -7],
       [-1, -3],
       [-1, -3],
       [ 3,  1],
       [ 7,  5]])

 在多个维度中的每个维度上单独使用一维花式索引

>>>i = np.arange(4)
>>>a[i,i]
>>>array([-8, -3,  2,  7])

>>>a[i[1:],i[1:]-1]
>>>array([-4,  1,  6])
​
>>>a[i[:3],i[:3]+1]
>>>array([-7, -2,  3])
  • 掩模

                掩模与花式索引相似,但是掩模必须是一个布尔数组

                掩模作用于形状相同或者轴长度相同的数组进行索引

                如果指定的位置为True,则显示对应的值;如果指定的位置为False,则不显示值

>>>a = np.arange(9)
>>>a.shape = (3,3)

>>>m = np.ones(3,dtype=bool)
>>>m
>>>array([ True,  True,  True])

>>>a[m,m]
>>>array([0, 4, 8])

                生成有效的掩模

>>>a = np.arange(16)
>>>a.shape  = (4,4)
>>>a < 5
>>>array([[ True,  True,  True,  True],
       [ True, False, False, False],
       [False, False, False, False],
       [False, False, False, False]])

                利用掩模

>>>a = np.arange(8)
>>>a.shape  = (2,4)
>>>m = (a>5)
>>>a[m]
>>>array([6, 7])

>>>a[a<5]
>>>array([0, 1, 2, 3, 4])

 Numpy 按位运算符

~bitwise_not(x)
|bitwise_or(x,y)
^bitwise_xor(x,y) x和y中只有一个True时
&bitwise_and(x,y)  

例:

>>>a[(a<7)^(a>=3)]
>>>array([0, 1, 2, 7])

  • 结构数组

结构化数组或者记录数组

构造结构化数组

num表示该列该有的元素数,数量默认为1

>>>("<col name>",<col dtype>,num)#num default = 1
  • 通用函数

add(a,b)加法
subtract(a,b)减法
multiply(a,b)乘法
divide(a,b)除法
power(a,b)乘方
mod(a,b)

abs(a)
sqrt(a)
conj(a)复数共轭
exp(a)
exp2(a)
log(a)
log2(a)
log10(a)
sin(a)
cos(a)
tan(a)
bitwise_or(a,b)按位或运算
bitiwise_xor(a,b)按位异或运算
bitiwise_and(a,b)按位与运算
invert(a)按位取反
left_shift(a,b)向左按位移动
right_shift(a,b)向右按位移动
minimun(a,b)两个矩阵对应位置上的两个元素中的最小值构成的矩阵
maximum(a,b)两个矩阵对应位置上的两个元素中的最小值构成的矩阵
isreal(a)矩阵中是实数的元素显示为True,否则为False
iscomplex(a)矩阵中是虚数的元素显示为True,否则为False
isfinite(a)矩阵中是有限数的元素显示为True,否则为False
isinf(a)矩阵中是无限数的元素显示为True,否则为False
isnan(a)矩阵中是数的元素显示为True,否则为False
floor(a)/ceil(a)/trunc(a)三个取整函数  取刚好小于/大于的整数取整数部分
  • 全局函数

                        

sum(a)
prod(a)累成数组中所有元素
min(a)
max(a)
argmin(a)返回数组中最小的元素的索引
argmax(a)
dot(a,b)点积
cross(a,b)叉积
mean(a)平均数
median(a)中位数
average(a,weights=none)加权平均数
std(a)标准差
var(a)方差
unique(a)返回数组中只出现一次的元素
append(a,b)连接两个数组

以上是关于Python Numpy详解的主要内容,如果未能解决你的问题,请参考以下文章

使用 numpy.random.normal 时如何指定上限和下限

是否有任何可以同时具有下限和上限的二次规划函数 - Python

python使用matplotlib可视化时间序列图并在时间序列可视化图像中的不同区域添加动态阈值动态阈值上限动态阈值下限

python使用matplotlib可视化线图(line plot)设置X轴坐标的下限和上限数值(setting the lower and upper bound of the x axis)

python使用matplotlib可视化线图(line plot)设置Y轴坐标的下限和上限数值(setting the lower and upper bound of the y axis)

怎么区别java泛型的上限和下限??