numpy基础加强版

数据类型

import numpy as np
arr1 = np.array([1,2,3],dtype=np.float64)
arr1
array([1., 2., 3.])
arr2 = np.array([1,2,3],dtype=np.int32)
arr2
array([1, 2, 3], dtype=int32)
arr1.dtype
dtype('float64')
arr2.dtype
dtype('int32')

新手不必担心,用时再考虑即可

2.数据类型转换

arr = np.array([1,2,3,4,5])
arr.dtype
dtype('int64')
float_arr = arr.astype(np.float64) #转换方法
float_arr.dtype
dtype('float64')

浮点数转换为整型时,小数点会被省略

arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr
array([ 3.7, -1.2, -2.6,  0.5, 12.9, 10.1])
arr.astype(np.int32) #转换方法
array([ 3, -1, -2,  0, 12, 10], dtype=int32)

字符串转换为浮点数

n_s = np.array(['1.25','-9.6','42'],dtype=np.string_)
n_s.astype(float)#转换
array([ 1.25, -9.6 , 42.  ])

2.3 直接替换

int_array = np.arange(10)
c_a = np.array([.22,.270,.357,.380,.44,.50],dtype=np.float64)
int_array.astype(c_a.dtype) #将c_a的数据类型应用到int_array
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

运用简称可减少代码量

运算

 arr = np.array([[1.,2.,3.,],[4.,5.,6.]])
arr
array([[1., 2., 3.],
       [4., 5., 6.]])
arr * arr #自己*自己
array([[ 1.,  4.,  9.],
       [16., 25., 36.]])
arr - arr
array([[0., 0., 0.],
       [0., 0., 0.]])
1 / arr #标量
array([[1.        , 0.5       , 0.33333333],
       [0.25      , 0.2       , 0.16666667]])
arr * 0.5 #应用到每个元素
array([[0.5, 1. , 1.5],
       [2. , 2.5, 3. ]])
arr2 = np.array([[0.,4.,1.],[7.,2.,12.]])
arr2 > arr #比较,必须在相同size
array([[False,  True, False],
       [ True, False,  True]])

索引和切片

arr = np.arange(10)
arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[5] #选取,从0开始
5
arr[5:8] #切片
array([5, 6, 7])
arr[5:8] = 12 #赋值
arr
array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])
arr_slice = arr[5:8] #构建新对象
arr_slice
array([12, 12, 12])
arr_slice[1] = 12345 #新对象的变化会影响原来对象
arr
array([    0,     1,     2,     3,     4,    12, 12345,    12,     8,
           9])
arr_slice[:] = 64 #特殊选取方法
arr
array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])
arr[5:8].copy #显性表示复制

多维亦是如此.相应联想

arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2]#索引
array([7, 8, 9])
arr2d[2][2]
9
arr2d[2,2] #同等方法
9

两维时,axis 0 代表 rows(行),axis 1 代表 columns(列)

arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) #2 2 3
arr3d
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
arr3d[0] #依旧为 2 X  3的array对象
array([[1, 2, 3],
       [4, 5, 6]])
old_values = arr3d[0].copy()
arr3d[0]=42
arr3d
array([[[42, 42, 42],
        [42, 42, 42]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
arr3d[0] = old_values  #copy对象不影响原对象
arr3d    
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
arr3d[1,0,0] #嵌套选取
7

切片索引

arr
array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])
arr[1:6]
array([ 1,  2,  3,  4, 64])
arr[:6]
array([ 0,  1,  2,  3,  4, 64])
arr2d
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
arr2d[:2] #止于2,不包括第2,选取前两行
array([[1, 2, 3],
       [4, 5, 6]])
arr2d[:2,1:] #选取前两行的后两列
array([[2, 3],
       [5, 6]])
arr2d[1,:2] #选取第一行的前两列
array([4, 5])
arr2d[:,:1] #冒号代表全部选中
array([[1],
       [4],
       [7]])
arr2d[:2,1:] = 0 #替换依然可行
arr2d
array([[1, 0, 0],
       [4, 0, 0],
       [7, 8, 9]])

布尔值,即真假,原理是真假对用1和0,只有两个,便于判断

names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
data = np.random.randn(7,4) #长度必须相等
names
array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='
data
array([[ 0.03317879, -0.64295019, -0.07074687, -0.47557693],
       [-0.38937679, -1.12534115, -1.81676011, -1.15545174],
       [-0.35255783, -0.20309579, -0.78609489, -0.83429794],
       [-0.72824954, -0.01455318,  2.40890211,  0.45262685],
       [-1.50436899, -0.01719232, -0.70454368,  2.29021736],
       [-1.0090259 , -1.0858159 , -0.55730015,  0.29311532],
       [ 0.24161904,  0.04861702,  0.23810033, -0.78593455]])
names == 'Bob' #两个等号表示数学意义上的相等,一个等号表示逻辑上的赋值
array([ True, False, False,  True, False, False, False])
data[names == 'Bob']
array([[ 0.03317879, -0.64295019, -0.07074687, -0.47557693],
       [-0.72824954, -0.01455318,  2.40890211,  0.45262685]])
data[names == 'Bob', 2:] #高级选取
array([[ 0.53825689,  0.08749286],
       [-0.85205114, -0.772436  ]])
data[names == 'Bob',3]
array([ 0.08749286, -0.772436  ])
names != 'Bob' #取反
array([False,  True,  True, False,  True,  True,  True])
data[~(names == 'Bob')] #取反
array([[-1.119334  , -0.99315582, -0.14021638, -0.68652541],
       [ 0.66135045, -0.27269187,  0.25154645,  0.26779766],
       [-0.42776762, -0.84351095, -0.79780832,  1.80460797],
       [-1.1681968 ,  0.13817726,  0.41940656, -0.15786619],
       [ 0.42844477, -1.58866021,  0.31450085, -0.03915103]])
cond = names == 'Bob' #简化操作
data[~cond]
array([[-1.119334  , -0.99315582, -0.14021638, -0.68652541],
       [ 0.66135045, -0.27269187,  0.25154645,  0.26779766],
       [-0.42776762, -0.84351095, -0.79780832,  1.80460797],
       [-1.1681968 ,  0.13817726,  0.41940656, -0.15786619],
       [ 0.42844477, -1.58866021,  0.31450085, -0.03915103]])
mask = (names == 'Bon') | (names == 'Will')  #或
mask

array([False, False,  True, False,  True, False, False])
data[mask]
array([[ 0.66135045, -0.27269187,  0.25154645,  0.26779766],
       [-0.42776762, -0.84351095, -0.79780832,  1.80460797]])
mask = (names == 'Bob') & (names == 'Will') #和
mask
array([False, False, False, False, False, False, False])
data[mask]
array([], shape=(0, 4), dtype=float64)

根据判断条件批量赋值

data[data < 0] = 0
data
array([[0.        , 0.        , 0.53825689, 0.08749286],
       [0.        , 0.        , 0.        , 0.        ],
       [0.66135045, 0.        , 0.25154645, 0.26779766],
       [1.34030771, 1.53001014, 0.        , 0.        ],
       [0.        , 0.        , 0.        , 1.80460797],
       [0.        , 0.13817726, 0.41940656, 0.        ],
       [0.42844477, 0.        , 0.31450085, 0.        ]])
data[names != 'Joe'] = 7
data
array([[7.        , 7.        , 7.        , 7.        ],
       [0.        , 0.        , 0.        , 0.        ],
       [7.        , 7.        , 7.        , 7.        ],
       [7.        , 7.        , 7.        , 7.        ],
       [7.        , 7.        , 7.        , 7.        ],
       [0.        , 0.13817726, 0.41940656, 0.        ],
       [0.42844477, 0.        , 0.31450085, 0.        ]])

花式索引

arr = np.empty((8,4))
for  i in range(8):
    arr[i] = i #按行赋值
arr
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])
arr[[4,3,0,6]] #直接选取行
array([[4., 4., 4., 4.],
       [3., 3., 3., 3.],
       [0., 0., 0., 0.],
       [6., 6., 6., 6.]])
arr[[-3,-5,-7]] #倒序也可以
array([[5., 5., 5., 5.],
       [3., 3., 3., 3.],
       [1., 1., 1., 1.]])
arr = np.arange(32).reshape((8,4))
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])
arr[[1,5,7,2],[0,3,1,2]] #行列对应选取,依次为第一行第0个,第五行第3个,,,,
array([ 4, 23, 29, 10])

见证奇迹的时刻,选取为矩阵

arr[[1,5,7,2]][:,[0,3,1,2]]
array([[ 4,  7,  5,  6],
       [20, 23, 21, 22],
       [28, 31, 29, 30],
       [ 8, 11,  9, 10]])

行列转置

arr = np.arange(15).reshape((3,5))
arr
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
arr.T
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

np.dot 内积

arr = np.random.randn(6,3)
arr
array([[ 0.14632913,  0.52363917, -0.61383088],
       [-0.43408235, -0.23481596,  0.50205854],
       [ 0.58277602,  0.39006049,  2.44427147],
       [-1.60012924,  1.13015109,  1.87930724],
       [ 0.06145772, -1.50099567, -0.21680612],
       [-0.12640319,  1.1378038 ,  0.33948385]])
np.dot(arr.T,arr)
array([[ 3.12963599, -1.63858658, -1.94666402],
       [-1.63858658,  5.30631065,  3.34968866],
       [-1.94666402,  3.34968866, 10.29736402]])

多维重排

arr = np.arange(16).reshape((2,2,4))
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr.transpose((1,0,2)) #重排方法
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr.swapaxes(1,2) #另一方法
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

ufunc 通用函数

arr = np.arange(10)
arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.sqrt(arr) #平方根
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])
np.exp(arr)
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

二元

x = np.random.randn(8)
y = np.random.randn(8)
x
array([ 0.76619326, -0.51913337, -0.61943584, -0.51367405, -1.81071209,
        0.20368937, -0.20443369, -0.99255842])
y
array([ 0.69034544,  0.05340984, -0.96784714, -1.6425589 , -0.06741981,
        0.71306132, -0.58463922, -1.3921061 ])
np.maximum(x,y) #取最大值,元素比较
array([ 0.76619326,  0.05340984, -0.61943584, -0.51367405, -0.06741981,
        0.71306132, -0.20443369, -0.99255842])
arr = np.random.randn(7) * 5
arr
array([ 1.75351542, -6.57187357,  9.2276292 ,  7.32215024,  5.6253457 ,
       -5.31130902, -2.07810797])
r_m,w_p = np.modf(arr) #分离为整数部分和小数部分
r_m #小数部分
array([ 0.75351542, -0.57187357,  0.2276292 ,  0.32215024,  0.6253457 ,
       -0.31130902, -0.07810797])
w_p #整数部分
array([ 1., -6.,  9.,  7.,  5., -5., -2.])
arr
array([ 1.75351542, -6.57187357,  9.2276292 ,  7.32215024,  5.6253457 ,
       -5.31130902, -2.07810797])
np.sqrt(arr) #负数不能开根
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in sqrt
  """Entry point for launching an IPython kernel.





array([1.32420369,        nan, 3.0377013 , 2.7059472 , 2.37178112,
              nan,        nan])
np.sqrt(arr,arr)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in sqrt
  """Entry point for launching an IPython kernel.





array([1.32420369,        nan, 3.0377013 , 2.7059472 , 2.37178112,
              nan,        nan])
arr #新array对象
array([1.32420369,        nan, 3.0377013 , 2.7059472 , 2.37178112,
              nan,        nan])

abs,fabs 绝对值
square 平方
log,log10,log2,log1p
isnan 判断

二元:add,subtract,multiply,divide, 加减乘除
maximum,minimum,
mod 取余
greater(_equal)/less 比较
logical_and/or/xor &/|/^

meshgrid

points = np.arange(-5,5,0.01)
xs,ys = np.meshgrid(points,points)
xs
array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       ...,
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])
ys
array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
       ...,
       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])
z = np.sqrt(xs ** 2 + ys ** 2)
z
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
        7.06400028],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       ...,
       [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
        7.04279774],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568]])

where 条件判断

xarr = np.array([1.1,1.2,1.3,1.4,1.5])
yarr = np.array([2.1,2.2,2.3,2.4,2.5])
cond = np.array([True,False,True,True,False])
result
[1.1, 2.2, 1.3, 1.4, 2.5]
result = np.where(cond,xarr,yarr) #谁真取谁
result
array([1.1, 2.2, 1.3, 1.4, 2.5])

正负值替换

arr = np.random.randn(4,4)
arr
array([[-0.14266064, -0.16213865, -0.58804574,  0.45092737],
       [ 0.8518436 , -0.78783841, -0.62372951,  1.13642129],
       [ 0.06346719,  1.20635278, -0.09238897,  1.73370433],
       [ 1.62183372,  0.08720613, -0.63442454,  2.27619414]])
cond = arr > 0
np.where(cond, 2, -2) #符合条件为2,不符合为-2
array([[-2, -2, -2,  2],
       [ 2, -2, -2,  2],
       [ 2,  2, -2,  2],
       [ 2,  2, -2,  2]])
np.where(cond,2,arr) #不符合保持原貌
array([[-0.14266064, -0.16213865, -0.58804574,  2.        ],
       [ 2.        , -0.78783841, -0.62372951,  2.        ],
       [ 2.        ,  2.        , -0.09238897,  2.        ],
       [ 2.        ,  2.        , -0.63442454,  2.        ]])

数学和统计方法

arr = np.random.randn(5,4)
arr
array([[-0.68218677,  1.10310301, -0.21057012, -0.55508466],
       [ 0.91256439, -0.20883975, -0.09176431, -0.66631307],
       [-1.04120502, -1.11187463, -0.03471294, -0.11266913],
       [ 1.71228664,  0.23509329,  0.31352707, -2.61562304],
       [-0.91986032,  0.5552931 ,  0.48340178, -0.20594334]])
arr.mean() #平均值
-0.15706889233659155
np.mean(arr) #平均值
-0.15706889233659155
arr.sum() #和
-3.1413778467318307

行列统计

arr.mean(axis=1) #按列取均值
array([-0.08618463, -0.01358819, -0.57511543, -0.08867901, -0.0217772 ])
arr.sum(axis=0) #按行取和
array([-0.01840108,  0.57277501,  0.45988147, -4.15563325])

其他方法

arr = np.array([0,1,2,3,4,5,6,7])
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
arr.cumsum() #累计和
array([ 0,  1,  3,  6, 10, 15, 21, 28])

多维

arr = np.array([[0,1,2],[3,4,5],[6,7,8]])
arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
arr.cumsum(0) #按行取累计和
array([[ 0,  1,  2],
       [ 3,  5,  7],
       [ 9, 12, 15]])
arr.cumprod(1) #按列
array([[  0,   0,   0],
       [  3,  12,  60],
       [  6,  42, 336]])

std 标准差
var 方差
min,max 大小
argmin,argmax 返回索引

布尔值方法

arr = np.random.randn(100)
(arr > 0).sum() #判断条件
63
bools = np.array([False,False,True,False])
bools.any() #一真则真,全假则假
True
bools.all() #全真为真,一假则假
False

排序

arr = np.random.randn(6)
arr
array([-1.19241559,  1.86955897, -1.47747941, -0.49292942,  1.38922409,
       -0.07618703])
arr.sort() #排序
arr
array([-1.47747941, -1.19241559, -0.49292942, -0.07618703,  1.38922409,
        1.86955897])

多维行列排序

arr = np.random.randn(5,3)
arr
array([[-0.18284374, -1.92183403, -1.33962176],
       [-0.35250898,  0.83480866,  0.43398843],
       [ 0.04709364, -0.08379553, -0.09993549],
       [ 0.87922406,  1.75488263, -0.57784417],
       [-0.93287139, -0.11406265,  0.71589254]])
arr.sort(1) #列
arr
array([[-1.92183403, -1.33962176, -0.18284374],
       [-0.35250898,  0.43398843,  0.83480866],
       [-0.09993549, -0.08379553,  0.04709364],
       [-0.57784417,  0.87922406,  1.75488263],
       [-0.93287139, -0.11406265,  0.71589254]])

特定位置

l_a = np.random.randn(1000)
l_a.sort()
l_a[int(0.05 * len(l_a))] #5%
-1.7231654793957891

独一无二

names
array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='
np.unique(names)
array(['Bob', 'Joe', 'Will'], dtype='
ints = np.array([3,3,3,2,2,1,1,4,4])
np.unique(ints)
array([1, 2, 3, 4])

pure python
sorted(set(names))

检验

values = np.array([6,0,0,3,2,5,6])
np.in1d(values,[2,3,6]) #检验values中的值是否在后面的list中
array([ True, False, False,  True,  True, False,  True])

文件输入与输出

arr = np.arange(10)
np.save('/Users/meininghang/Desktop/s_a.npy',arr) #存储文件
np.load('/Users/meininghang/Desktop/s_a.npy') #读取
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.savez('/Users/meininghang/Desktop/s_a.npz',a=arr,b=arr) #存储文件为.npz
arch = np.load('/Users/meininghang/Desktop/s_a.npz') #读取文件
arch['b']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arch['a']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.savez_compressed('/Users/meininghang/Desktop/s_a2.npz',a = arr,b=arr) #存储为压缩文件

线代

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,23,],[-1,7],[8,9]])
x
array([[1, 2, 3],
       [4, 5, 6]])
y
array([[ 6, 23],
       [-1,  7],
       [ 8,  9]])
x.dot(y)
array([[ 28,  64],
       [ 67, 181]])
np.dot(x,y) #等价
array([[ 28,  64],
       [ 67, 181]])
x @ np.ones(3) #特殊用法
array([ 6., 15.])

等价于np.dot(x,np.ones(3))

np.ones(3)
array([1., 1., 1.])

其他

from numpy.linalg import inv,qr
X = np.random.randn(5,5)
mat = X.T.dot(X)
inv(mat) #取反
array([[ 0.3153804 ,  0.06572043,  0.09295758, -0.05295502,  0.10039062],
       [ 0.06572043,  0.14119364,  0.0532526 , -0.04233026,  0.02636569],
       [ 0.09295758,  0.0532526 ,  0.41001573,  0.00487669,  0.00854835],
       [-0.05295502, -0.04233026,  0.00487669,  0.13017746, -0.01152687],
       [ 0.10039062,  0.02636569,  0.00854835, -0.01152687,  0.1324641 ]])
mat.dot(inv(mat))
array([[ 1.00000000e+00,  1.38314235e-18, -2.30089733e-17,
        -2.31625676e-18,  0.00000000e+00],
       [-4.36359852e-17,  1.00000000e+00,  1.24809158e-17,
        -6.64902607e-17, -2.77555756e-17],
       [ 4.67942395e-18,  1.06484372e-17,  1.00000000e+00,
         5.01064367e-19, -1.38777878e-17],
       [ 6.45223305e-17, -1.90564222e-17,  1.49753705e-17,
         1.00000000e+00,  2.77555756e-17],
       [ 0.00000000e+00, -5.55111512e-17,  1.38777878e-17,
         1.38777878e-17,  1.00000000e+00]])
q,r = qr(mat)
q
array([[-0.78454422,  0.03130395, -0.09538485,  0.14529988,  0.59439053],
       [ 0.13807729, -0.9415313 , -0.09623544,  0.24662385,  0.15610539],
       [ 0.15150193,  0.11585421, -0.97871075, -0.05646742,  0.05061286],
       [-0.23236293, -0.28614052, -0.01989414, -0.92686434, -0.06824804],
       [ 0.53710302,  0.13130224,  0.15287236, -0.23621718,  0.78429048]])
r
array([[-6.32722241,  0.7479685 ,  1.57470985, -3.43964677,  8.30010971],
       [ 0.        , -9.16278613,  1.48489447, -5.03119444,  2.28135854],
       [ 0.        ,  0.        , -2.41505909,  0.05405567,  1.31462198],
       [ 0.        ,  0.        ,  0.        , -7.33442291, -2.42148731],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  5.92077767]])

random

samples = np.random.normal(size=(4,4))
samples
array([[ 0.64867627,  0.53180508, -0.54734626, -0.45303299],
       [-0.03251697,  0.39046217,  1.98828937,  0.57414828],
       [-2.342141  , -0.16672602, -0.08988844, -1.1986827 ],
       [-1.52778635,  0.50663291, -1.06283763, -1.43748063]])
np.random.seed(1234)
rng = np.random.RandomState(1234) #isolate
rng.randn(10)
array([ 0.47143516, -1.19097569,  1.43270697, -0.3126519 , -0.72058873,
        0.88716294,  0.85958841, -0.6365235 ,  0.01569637, -2.24268495])

随机漫步

pure Python

import random
position = 0
walk = [position]
steps = 1000
for  i in range(steps):
    step = 1 if random.randint(0,1) else -1
    position += step 
    walk.append(position)
import matplotlib.pyplot as plt
plt.plot(walk[:100])
[]

[图片上传失败...(image-2e107-1517836465428)]

nsteps = 1000
draws = np.random.randint(0,2,size = nsteps)
steps = np.where(draws>0,1,-1)
walk = steps.cumsum()
walk.min()
-9
walk.max()
60
(np.abs(walk) >= 10).argmax()
297

你可能感兴趣的:(numpy基础加强版)