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])

  • 结构数组

  • 通用函数

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) 连接两个数组

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>