numpy 基础操作
Numpy 基础操作¶
以numpy的基本数据例子来学习numpy基本数据处理方法
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。主要内容有:
- 创建数组
- 数组维度转换
- 数据选区和切片
- 数组数据计算
- 随机数
- 数据合并
- 数据统计计算
import numpy as np
创建一维数组¶
In [2]:data = np.arange(15) dataOut[2]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
reshape进行维度转换¶
- data.reshape(rows, cols), 转换的行数,列数。
- -1表示使用默认计算,reshape(3, -1),表示三行,列数根据数据自动计算
- reshape(-1, 5)表示5列,行数根据计算得出
data = data.reshape(3,5) dataOut[3]:
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
np.newaxis增加维度¶
为数据增加维度,下面例子展示增加了一个维度
数据变为三行,一列,垂直五的数据
In [4]:d = data[:, np.newaxis] dOut[4]:
array([[[ 0, 1, 2, 3, 4]], [[ 5, 6, 7, 8, 9]], [[10, 11, 12, 13, 14]]])In [5]:
d.shapeOut[5]:
(3, 1, 5)In [6]:
data.shapeOut[6]:
(3, 5)
读取逗号分割数据¶
In [7]:url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' iris_2d = np.genfromtxt(url, delimiter=',', dtype='object') iris_2d[:10]Out[7]:
array([[b'5.1', b'3.5', b'1.4', b'0.2', b'Iris-setosa'], [b'4.9', b'3.0', b'1.4', b'0.2', b'Iris-setosa'], [b'4.7', b'3.2', b'1.3', b'0.2', b'Iris-setosa'], [b'4.6', b'3.1', b'1.5', b'0.2', b'Iris-setosa'], [b'5.0', b'3.6', b'1.4', b'0.2', b'Iris-setosa'], [b'5.4', b'3.9', b'1.7', b'0.4', b'Iris-setosa'], [b'4.6', b'3.4', b'1.4', b'0.3', b'Iris-setosa'], [b'5.0', b'3.4', b'1.5', b'0.2', b'Iris-setosa'], [b'4.4', b'2.9', b'1.4', b'0.2', b'Iris-setosa'], [b'4.9', b'3.1', b'1.5', b'0.1', b'Iris-setosa']], dtype=object)
数据切片和类型转换¶
使用[m, n]来对数据取值或者切片
- [:, n] 取列数据
- [m, :] 取行数据
- [m:n, m:n] 数据切片
astype来指定数据类型
In [8]:names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species') sepallength = iris_2d[:, 0].astype('float') petallength = iris_2d[:, 2].astype('float') sepallengthOut[8]:
array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. , 5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4, 5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4, 6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6, 6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3, 6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2, 7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9])In [9]:
petallength
Out[9]:
array([1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1. , 1.7, 1.9, 1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.5, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5, 4.9, 4. , 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4. , 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4. , 4.9, 4.7, 4.3, 4.4, 4.8, 5. , 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4. , 4.4, 4.6, 4. , 3.3, 4.2, 4.2, 4.2, 4.3, 3. , 4.1, 6. , 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5. , 5.1, 5.3, 5.5, 6.7, 6.9, 5. , 5.7, 4.9, 6.7, 4.9, 5.7, 6. , 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5. , 5.2, 5.4, 5.1])
数据运算¶
numpy数据运算语法与python基本一致,但是是数据中的每个数据进行运算
- arr数据与单个数据运算,arr中每个数据与单数进行计算,返回新的arr
- arr之间运算,arr对用位置的数据一一计算,返回新的arr
volume = (np.pi * petallength * (sepallength**2))/3 volumeOut[10]:
array([ 38.13265163, 35.20049849, 30.07237208, 33.23805027, 36.65191429, 51.91167701, 31.02218026, 39.26990817, 28.38324243, 37.71481981, 45.80442089, 38.60389053, 33.77840421, 21.29895099, 42.27327075, 51.03517266, 39.69716477, 38.13265163, 57.83986235, 40.85641246, 51.91167701, 40.85641246, 22.15870018, 46.30393412, 45.84212 , 41.88790205, 41.88790205, 42.47433268, 39.6427105 , 37.01215025, 38.60389053, 45.80442089, 42.47433268, 44.34881629, 37.71481981, 31.41592654, 41.1810437 , 37.71481981, 26.35586797, 40.85641246, 34.03392041, 27.56747554, 26.35586797, 41.88790205, 51.75145578, 33.77840421, 43.58017329, 31.02218026, 44.12366882, 36.65191429, 241.16959604, 193.01945264, 244.29966952, 126.71090369, 203.52284408, 153.10551797, 195.34737279, 82.97260357, 209.83325652, 110.43326496, 91.62978573, 153.10237638, 150.79644737, 183.14123814, 118.22441474, 206.83827152, 147.78051842, 144.43367505, 181.14423241, 128.0764493 , 174.97414443, 155.86488352, 203.66002695, 183.14123814, 184.4408103 , 200.71007145, 232.42759088, 235.04349037, 169.64600329, 119.08206953, 120.37535851, 117.20758592, 137.38812993, 192.2654704 , 137.41326267, 169.64600329, 220.94088094, 182.87839155, 134.64447234, 126.71090369, 139.38199406, 179.24461605, 140.91090249, 86.39379797, 137.92848386, 142.89848344, 142.89848344, 173.09337763, 81.71282492, 139.4961386 , 249.37962484, 179.66140067, 311.45644848, 232.75431652, 256.61575992, 399.20846168, 113.14445942, 351.57249227, 272.65044882, 331.14899843, 225.64489234, 227.33402199, 266.32328122, 170.11724219, 179.66140067, 227.33402199, 243.34253096, 415.99189683, 428.40956539, 188.49555922, 284.18532985, 160.91656451, 415.99189683, 203.66002695, 267.94957902, 325.72032632, 193.22051457, 190.93448231, 240.2019855 , 314.86298211, 349.80168121, 418.27583469, 240.2019855 , 211.97268112, 218.21083693, 378.73889114, 232.75431652, 235.91266433, 180.95573685, 269.22820723, 263.24870921, 254.2710846 , 179.66140067, 285.69224713, 267.94957902, 244.44522998, 207.81635403, 230.069302 , 217.37307889, 185.91002846])
数据维度转换¶
volume原来是一维的,增加维度后,变为二维
In [11]:volume = volume[:, np.newaxis] volumeOut[11]:
array([[ 38.13265163], [ 35.20049849], [ 30.07237208], [ 33.23805027], [ 36.65191429], [ 51.91167701], [ 31.02218026], [ 39.26990817], [ 28.38324243], [ 37.71481981], [ 45.80442089], [ 38.60389053], [ 33.77840421], [ 21.29895099], [ 42.27327075], [ 51.03517266], [ 39.69716477], [ 38.13265163], [ 57.83986235], [ 40.85641246], [ 51.91167701], [ 40.85641246], [ 22.15870018], [ 46.30393412], [ 45.84212 ], [ 41.88790205], [ 41.88790205], [ 42.47433268], [ 39.6427105 ], [ 37.01215025], [ 38.60389053], [ 45.80442089], [ 42.47433268], [ 44.34881629], [ 37.71481981], [ 31.41592654], [ 41.1810437 ], [ 37.71481981], [ 26.35586797], [ 40.85641246], [ 34.03392041], [ 27.56747554], [ 26.35586797], [ 41.88790205], [ 51.75145578], [ 33.77840421], [ 43.58017329], [ 31.02218026], [ 44.12366882], [ 36.65191429], [241.16959604], [193.01945264], [244.29966952], [126.71090369], [203.52284408], [153.10551797], [195.34737279], [ 82.97260357], [209.83325652], [110.43326496], [ 91.62978573], [153.10237638], [150.79644737], [183.14123814], [118.22441474], [206.83827152], [147.78051842], [144.43367505], [181.14423241], [128.0764493 ], [174.97414443], [155.86488352], [203.66002695], [183.14123814], [184.4408103 ], [200.71007145], [232.42759088], [235.04349037], [169.64600329], [119.08206953], [120.37535851], [117.20758592], [137.38812993], [192.2654704 ], [137.41326267], [169.64600329], [220.94088094], [182.87839155], [134.64447234], [126.71090369], [139.38199406], [179.24461605], [140.91090249], [ 86.39379797], [137.92848386], [142.89848344], [142.89848344], [173.09337763], [ 81.71282492], [139.4961386 ], [249.37962484], [179.66140067], [311.45644848], [232.75431652], [256.61575992], [399.20846168], [113.14445942], [351.57249227], [272.65044882], [331.14899843], [225.64489234], [227.33402199], [266.32328122], [170.11724219], [179.66140067], [227.33402199], [243.34253096], [415.99189683], [428.40956539], [188.49555922], [284.18532985], [160.91656451], [415.99189683], [203.66002695], [267.94957902], [325.72032632], [193.22051457], [190.93448231], [240.2019855 ], [314.86298211], [349.80168121], [418.27583469], [240.2019855 ], [211.97268112], [218.21083693], [378.73889114], [232.75431652], [235.91266433], [180.95573685], [269.22820723], [263.24870921], [254.2710846 ], [179.66140067], [285.69224713], [267.94957902], [244.44522998], [207.81635403], [230.069302 ], [217.37307889], [185.91002846]])
计算示例¶
In [12]:data
Out[12]:
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])In [13]:
# 取第四列数据,每个数据+10 d = data[:,4] +10 dOut[13]:
array([14, 19, 24])In [14]:
d = d[:, np.newaxis] dOut[14]:
array([[14], [19], [24]])
数据纵向堆叠¶
- np.hstack([data1, data2]), 把data2在列的方向上添加到data1上
- np.vstack([data1, data2]), data2在行的方向上添加到data1上
np.hstack([data,d])Out[15]:
array([[ 0, 1, 2, 3, 4, 14], [ 5, 6, 7, 8, 9, 19], [10, 11, 12, 13, 14, 24]])
查找数据¶
np.partition快速查找第n大的值
In [16]:l=[3,4,5,2,1] np.partition(l,kth=-4)Out[16]:
array([1, 2, 5, 4, 3])
随机数¶
In [17]:b = np.random.rand(10) bOut[17]:
array([0.68561367, 0.01516211, 0.53513034, 0.87153709, 0.06330117, 0.86803698, 0.11665939, 0.11038331, 0.391967 , 0.94081668])In [18]:
b = np.random.uniform(0,10,5) bOut[18]:
array([2.06978576, 7.1781825 , 2.43242777, 8.59237313, 7.29724532])In [19]:
np.random.randn(5)Out[19]:
array([ 0.00160165, 1.16678333, -0.67973919, -0.3598035 , -0.00290401])In [20]:
np.random.randint(0,10,5)Out[20]:
array([8, 9, 3, 2, 4])In [21]:
np.random.randint(0,10,5)Out[21]:
array([2, 3, 3, 2, 4])In [22]:
np.random.seed(5) np.random.randint(0,10,5)Out[22]:
array([3, 6, 6, 0, 9])In [23]:
np.random.seed(6) np.random.randint(0,10,5)Out[23]:
array([9, 3, 4, 0, 9])In [24]:
np.random.uniform(10,100,10)Out[24]:
array([18.9524523 , 64.76262553, 57.73568176, 53.45494409, 84.2688357 , 77.9511675 , 45.09780233, 31.58324146, 24.00535865, 75.18958605])In [25]:
np.random.standard_normal(10)Out[25]:
array([-0.05607706, 0.86108782, 1.02566315, 0.60680207, 1.97193091, -0.47434219, -0.39388112, -0.97062796, -1.02770216, 2.08217624])In [26]:
np.linspace(1,20, 10)Out[26]:
array([ 1. , 3.11111111, 5.22222222, 7.33333333, 9.44444444, 11.55555556, 13.66666667, 15.77777778, 17.88888889, 20. ])In [27]:
np.arange(0,5)Out[27]:
array([0, 1, 2, 3, 4])In [28]:
a = np.arange(10).reshape(10) aOut[28]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [29]:
a+aOut[29]:
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])In [30]:
a-aOut[30]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])In [31]:
a*aOut[31]:
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])In [32]:
a/a
c:\python36\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide """Entry point for launching an IPython kernel.Out[32]:
array([nan, 1., 1., 1., 1., 1., 1., 1., 1., 1.])In [33]:
a.dot(a)Out[33]:
285In [34]:
a
Out[34]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [35]:
b = np.arange(12).reshape(3,4) bOut[35]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [36]:
b[0]Out[36]:
array([0, 1, 2, 3])In [37]:
b[:,0]Out[37]:
array([0, 4, 8])In [38]:
b[0,:]Out[38]:
array([0, 1, 2, 3])In [39]:
b[-1]Out[39]:
array([ 8, 9, 10, 11])In [40]:
b.sizeOut[40]:
12In [41]:
b.shapeOut[41]:
(3, 4)
数据拉平¶
将多维数据将为一维
- ravel 方法是返回的视图,修改数据会影响原数据
- flat 方法是返回原数据的copy,不会影响原数据
b.ravel()Out[42]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])In [43]:
[x for x in b.flat]Out[43]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]In [44]:
b.flat[3]Out[44]:
3
数据resize和reshape¶
- reshape:有返回值,所谓有返回值,即不对原始多维数组进行修改;
- resize:无返回值,所谓有返回值,即会对原始多维数组进行修改;
b.reshape(3,4)Out[45]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [46]:
c = b.resize(3,4) cIn [47]:
b
Out[47]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
arr平均值¶
np.mean(d, axis=0),计算平均值,axis来指定按那个轴运算
In [48]:np.mean(b, axis=0)Out[48]:
array([4., 5., 6., 7.])In [49]:
a = np.array([1,0.2,3])In [50]:
a
Out[50]:
array([1. , 0.2, 3. ])In [51]:
a.dtypeOut[51]:
dtype('float64')In [52]:
np.arange(10)Out[52]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
特殊矩阵¶
In [53]:np.ones((5,5))Out[53]:
array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]])In [54]:
b
Out[54]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [55]:
np.ones_like(b)Out[55]:
array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]])In [56]:
np.identity(4)Out[56]:
array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])In [57]:
np.eye(4)Out[57]:
array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])
取数据示例¶
In [58]:a
Out[58]:
array([1. , 0.2, 3. ])In [59]:
b
Out[59]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [60]:
b[:,2]Out[60]:
array([ 2, 6, 10])In [61]:
# 布尔值取数据 b[b>3]Out[61]:
array([ 4, 5, 6, 7, 8, 9, 10, 11])In [62]:
b
Out[62]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [63]:
b[b==3]Out[63]:
array([3])In [64]:
b
Out[64]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [65]:
c = b[b!=3]In [66]:
c
Out[66]:
array([ 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11])
花式索引¶
取特定的行,并按照指定顺序排序
In [67]:b
Out[67]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])In [68]:
b[[2,0,1]]Out[68]:
array([[ 8, 9, 10, 11], [ 0, 1, 2, 3], [ 4, 5, 6, 7]])In [69]:
b = np.arange(32).reshape(8,4) bOut[69]:
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]])In [70]:
b[[1,5,7,2],[0,3,1,2]]Out[70]:
array([ 4, 23, 29, 10])In [71]:
b[[1,5,7,2]][:,[0,3,1,2]]Out[71]:
array([[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]])In [72]:
b
Out[72]:
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]])
矩阵转置,轴向交换¶
In [73]:b.swapaxes(0,1)Out[73]:
array([[ 0, 4, 8, 12, 16, 20, 24, 28], [ 1, 5, 9, 13, 17, 21, 25, 29], [ 2, 6, 10, 14, 18, 22, 26, 30], [ 3, 7, 11, 15, 19, 23, 27, 31]])In [74]:
b.swapaxes(1,0)Out[74]:
array([[ 0, 4, 8, 12, 16, 20, 24, 28], [ 1, 5, 9, 13, 17, 21, 25, 29], [ 2, 6, 10, 14, 18, 22, 26, 30], [ 3, 7, 11, 15, 19, 23, 27, 31]])In [75]:
b
Out[75]:
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]])
矩阵运算示例¶
In [76]:np.add(b,b)Out[76]:
array([[ 0, 2, 4, 6], [ 8, 10, 12, 14], [16, 18, 20, 22], [24, 26, 28, 30], [32, 34, 36, 38], [40, 42, 44, 46], [48, 50, 52, 54], [56, 58, 60, 62]])In [77]:
np.sort(b[[2,0,1]])Out[77]:
array([[ 8, 9, 10, 11], [ 0, 1, 2, 3], [ 4, 5, 6, 7]])In [78]:
b[[2,0,1]]Out[78]:
array([[ 8, 9, 10, 11], [ 0, 1, 2, 3], [ 4, 5, 6, 7]])In [79]:
np.linalg.eig(b[0:4])Out[79]:
(array([ 3.24642492e+01, -2.46424920e+00, 2.14966418e-15, -1.17200157e-16]), array([[-0.11417645, 0.7327781 , -0.40377562, 0.05533605], [-0.3300046 , 0.28974835, 0.81421492, 0.33237807], [-0.54583275, -0.15328139, -0.41710299, -0.83076428], [-0.76166089, -0.59631113, 0.00666369, 0.44305017]]))In [80]:
np.linalg.detOut[80]:
<function numpy.linalg.linalg.det>In [81]:
b
Out[81]:
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]])In [82]:
b[0:4]Out[82]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]])In [83]:
np.random.randn(10)Out[83]:
array([-0.8099314 , 0.14817512, -0.69258651, -0.67934563, -0.15739984, 1.2889822 , 1.45221671, 0.2307127 , 0.88579292, 0.96533113])In [84]:
np.random.uniform(0,1,10)Out[84]:
array([0.79782627, 0.88189639, 0.82160469, 0.30594132, 0.74537515, 0.38821925, 0.46966765, 0.71004438, 0.36512663, 0.92725033])In [85]:
np.random.random(5)Out[85]:
array([0.73218711, 0.24383709, 0.67966439, 0.0595789 , 0.85628818])In [86]:
w = 5000 n = 1000 draws = np.random.randint(0,2,size=(w,n)) drawsOut[86]:
array([[0, 0, 1, ..., 0, 1, 1], [1, 0, 1, ..., 0, 1, 1], [0, 0, 0, ..., 0, 0, 0], ..., [1, 0, 1, ..., 0, 0, 0], [0, 1, 1, ..., 1, 0, 0], [0, 1, 0, ..., 0, 0, 0]])In [87]:
steps = np.where(draws > 0, 1, -1) stepsOut[87]:
array([[-1, -1, 1, ..., -1, 1, 1], [ 1, -1, 1, ..., -1, 1, 1], [-1, -1, -1, ..., -1, -1, -1], ..., [ 1, -1, 1, ..., -1, -1, -1], [-1, 1, 1, ..., 1, -1, -1], [-1, 1, -1, ..., -1, -1, -1]])In [88]:
# 累计求和 walks = steps.cumsum(1) walksOut[88]:
array([[ -1, -2, -1, ..., 16, 17, 18], [ 1, 0, 1, ..., -34, -33, -32], [ -1, -2, -3, ..., -24, -25, -26], ..., [ 1, 0, 1, ..., 56, 55, 54], [ -1, 0, 1, ..., -34, -35, -36], [ -1, 0, -1, ..., 0, -1, -2]], dtype=int32)
更多精彩