您的位置:首页 > 编程语言 > Python开发

利用Python进行数据分析(3)—— Numpy Basic(3)

2017-09-13 18:16 537 查看

Data processing using arrays

import numpy as np
from matplotlib.pyplot import imshow, title
import matplotlib.pyplot as plt

np.set_printoptions(precision=4, suppress=True)

# 起始点,终止点,步长
points = np.arange(-5, 5, 0.01) # 1000 equally spaced points
print(points)

# 接受两个一维数组,产生两个二维矩阵
xs, ys = np.meshgrid(points, points)

print('------------------')
# 行上从 -5.0 到 4.99
print(xs)
print('------------------')
# 列上从 -5.0 到 4.99
print(ys)

# xs和ys 两二维数组的元素,分别乘方,后两数组加和,再开方
z = np.sqrt(xs ** 2 + ys ** 2)
print(z)


[-5.   -4.99 -4.98 -4.97 -4.96 -4.95 -4.94 -4.93 -4.92 -4.91 -4.9  -4.89
-4.88 -4.87 -4.86 -4.85 -4.84 -4.83 -4.82 -4.81 -4.8  -4.79 -4.78 -4.77
-4.76 -4.75 -4.74 -4.73 -4.72 -4.71 -4.7  -4.69 -4.68 -4.67 -4.66 -4.65
-4.64 -4.63 -4.62 -4.61 -4.6  -4.59 -4.58 -4.57 -4.56 -4.55 -4.54 -4.53
-4.52 -4.51 -4.5  -4.49 -4.48 -4.47 -4.46 -4.45 -4.44 -4.43 -4.42 -4.41
-4.4  -4.39 -4.38 -4.37 -4.36 -4.35 -4.34 -4.33 -4.32 -4.31 -4.3  -4.29
-4.28 -4.27 -4.26 -4.25 -4.24 -4.23 -4.22 -4.21 -4.2  -4.19 -4.18 -4.17
-4.16 -4.15 -4.14 -4.13 -4.12 -4.11 -4.1  -4.09 -4.08 -4.07 -4.06 -4.05
-4.04 -4.03 -4.02 -4.01 -4.   -3.99 -3.98 -3.97 -3.96 -3.95 -3.94 -3.93
-3.92 -3.91 -3.9  -3.89 -3.88 -3.87 -3.86 -3.85 -3.84 -3.83 -3.82 -3.81
-3.8  -3.79 -3.78 -3.77 -3.76 -3.75 -3.74 -3.73 -3.72 -3.71 -3.7  -3.69
-3.68 -3.67 -3.66 -3.65 -3.64 -3.63 -3.62 -3.61 -3.6  -3.59 -3.58 -3.57
-3.56 -3.55 -3.54 -3.53 -3.52 -3.51 -3.5  -3.49 -3.48 -3.47 -3.46 -3.45
-3.44 -3.43 -3.42 -3.41 -3.4  -3.39 -3.38 -3.37 -3.36 -3.35 -3.34 -3.33
-3.32 -3.31 -3.3  -3.29 -3.28 -3.27 -3.26 -3.25 -3.24 -3.23 -3.22 -3.21
-3.2  -3.19 -3.18 -3.17 -3.16 -3.15 -3.14 -3.13 -3.12 -3.11 -3.1  -3.09
-3.08 -3.07 -3.06 -3.05 -3.04 -3.03 -3.02 -3.01 -3.   -2.99 -2.98 -2.97
-2.96 -2.95 -2.94 -2.93 -2.92 -2.91 -2.9  -2.89 -2.88 -2.87 -2.86 -2.85
-2.84 -2.83 -2.82 -2.81 -2.8  -2.79 -2.78 -2.77 -2.76 -2.75 -2.74 -2.73
-2.72 -2.71 -2.7  -2.69 -2.68 -2.67 -2.66 -2.65 -2.64 -2.63 -2.62 -2.61
-2.6  -2.59 -2.58 -2.57 -2.56 -2.55 -2.54 -2.53 -2.52 -2.51 -2.5  -2.49
-2.48 -2.47 -2.46 -2.45 -2.44 -2.43 -2.42 -2.41 -2.4  -2.39 -2.38 -2.37
-2.36 -2.35 -2.34 -2.33 -2.32 -2.31 -2.3  -2.29 -2.28 -2.27 -2.26 -2.25
-2.24 -2.23 -2.22 -2.21 -2.2  -2.19 -2.18 -2.17 -2.16 -2.15 -2.14 -2.13
-2.12 -2.11 -2.1  -2.09 -2.08 -2.07 -2.06 -2.05 -2.04 -2.03 -2.02 -2.01
-2.   -1.99 -1.98 -1.97 -1.96 -1.95 -1.94 -1.93 -1.92 -1.91 -1.9  -1.89
-1.88 -1.87 -1.86 -1.85 -1.84 -1.83 -1.82 -1.81 -1.8  -1.79 -1.78 -1.77
-1.76 -1.75 -1.74 -1.73 -1.72 -1.71 -1.7  -1.69 -1.68 -1.67 -1.66 -1.65
-1.64 -1.63 -1.62 -1.61 -1.6  -1.59 -1.58 -1.57 -1.56 -1.55 -1.54 -1.53
-1.52 -1.51 -1.5  -1.49 -1.48 -1.47 -1.46 -1.45 -1.44 -1.43 -1.42 -1.41
-1.4  -1.39 -1.38 -1.37 -1.36 -1.35 -1.34 -1.33 -1.32 -1.31 -1.3  -1.29
-1.28 -1.27 -1.26 -1.25 -1.24 -1.23 -1.22 -1.21 -1.2  -1.19 -1.18 -1.17
-1.16 -1.15 -1.14 -1.13 -1.12 -1.11 -1.1  -1.09 -1.08 -1.07 -1.06 -1.05
-1.04 -1.03 -1.02 -1.01 -1.   -0.99 -0.98 -0.97 -0.96 -0.95 -0.94 -0.93
-0.92 -0.91 -0.9  -0.89 -0.88 -0.87 -0.86 -0.85 -0.84 -0.83 -0.82 -0.81
-0.8  -0.79 -0.78 -0.77 -0.76 -0.75 -0.74 -0.73 -0.72 -0.71 -0.7  -0.69
-0.68 -0.67 -0.66 -0.65 -0.64 -0.63 -0.62 -0.61 -0.6  -0.59 -0.58 -0.57
-0.56 -0.55 -0.54 -0.53 -0.52 -0.51 -0.5  -0.49 -0.48 -0.47 -0.46 -0.45
-0.44 -0.43 -0.42 -0.41 -0.4  -0.39 -0.38 -0.37 -0.36 -0.35 -0.34 -0.33
-0.32 -0.31 -0.3  -0.29 -0.28 -0.27 -0.26 -0.25 -0.24 -0.23 -0.22 -0.21
-0.2  -0.19 -0.18 -0.17 -0.16 -0.15 -0.14 -0.13 -0.12 -0.11 -0.1  -0.09
-0.08 -0.07 -0.06 -0.05 -0.04 -0.03 -0.02 -0.01 -0.    0.01  0.02  0.03
0.04  0.05  0.06  0.07  0.08  0.09  0.1   0.11  0.12  0.13  0.14  0.15
0.16  0.17  0.18  0.19  0.2   0.21  0.22  0.23  0.24  0.25  0.26  0.27
0.28  0.29  0.3   0.31  0.32  0.33  0.34  0.35  0.36  0.37  0.38  0.39
0.4   0.41  0.42  0.43  0.44  0.45  0.46  0.47  0.48  0.49  0.5   0.51
0.52  0.53  0.54  0.55  0.56  0.57  0.58  0.59  0.6   0.61  0.62  0.63
0.64  0.65  0.66  0.67  0.68  0.69  0.7   0.71  0.72  0.73  0.74  0.75
0.76  0.77  0.78  0.79  0.8   0.81  0.82  0.83  0.84  0.85  0.86  0.87
0.88  0.89  0.9   0.91  0.92  0.93  0.94  0.95  0.96  0.97  0.98  0.99
1.    1.01  1.02  1.03  1.04  1.05  1.06  1.07  1.08  1.09  1.1   1.11
1.12  1.13  1.14  1.15  1.16  1.17  1.18  1.19  1.2   1.21  1.22  1.23
1.24  1.25  1.26  1.27  1.28  1.29  1.3   1.31  1.32  1.33  1.34  1.35
1.36  1.37  1.38  1.39  1.4   1.41  1.42  1.43  1.44  1.45  1.46  1.47
1.48  1.49  1.5   1.51  1.52  1.53  1.54  1.55  1.56  1.57  1.58  1.59
1.6   1.61  1.62  1.63  1.64  1.65  1.66  1.67  1.68  1.69  1.7   1.71
1.72  1.73  1.74  1.75  1.76  1.77  1.78  1.79  1.8   1.81  1.82  1.83
1.84  1.85  1.86  1.87  1.88  1.89  1.9   1.91  1.92  1.93  1.94  1.95
1.96  1.97  1.98  1.99  2.    2.01  2.02  2.03  2.04  2.05  2.06  2.07
2.08  2.09  2.1   2.11  2.12  2.13  2.14  2.15  2.16  2.17  2.18  2.19
2.2   2.21  2.22  2.23  2.24  2.25  2.26  2.27  2.28  2.29  2.3   2.31
2.32  2.33  2.34  2.35  2.36  2.37  2.38  2.39  2.4   2.41  2.42  2.43
2.44  2.45  2.46  2.47  2.48  2.49  2.5   2.51  2.52  2.53  2.54  2.55
2.56  2.57  2.58  2.59  2.6   2.61  2.62  2.63  2.64  2.65  2.66  2.67
2.68  2.69  2.7   2.71  2.72  2.73  2.74  2.75  2.76  2.77  2.78  2.79
2.8   2.81  2.82  2.83  2.84  2.85  2.86  2.87  2.88  2.89  2.9   2.91
2.92  2.93  2.94  2.95  2.96  2.97  2.98  2.99  3.    3.01  3.02  3.03
3.04  3.05  3.06  3.07  3.08  3.09  3.1   3.11  3.12  3.13  3.14  3.15
3.16  3.17  3.18  3.19  3.2   3.21  3.22  3.23  3.24  3.25  3.26  3.27
3.28  3.29  3.3   3.31  3.32  3.33  3.34  3.35  3.36  3.37  3.38  3.39
3.4   3.41  3.42  3.43  3.44  3.45  3.46  3.47  3.48  3.49  3.5   3.51
3.52  3.53  3.54  3.55  3.56  3.57  3.58  3.59  3.6   3.61  3.62  3.63
3.64  3.65  3.66  3.67  3.68  3.69  3.7   3.71  3.72  3.73  3.74  3.75
3.76  3.77  3.78  3.79  3.8   3.81  3.82  3.83  3.84  3.85  3.86  3.87
3.88  3.89  3.9   3.91  3.92  3.93  3.94  3.95  3.96  3.97  3.98  3.99
4.    4.01  4.02  4.03  4.04  4.05  4.06  4.07  4.08  4.09  4.1   4.11
4.12  4.13  4.14  4.15  4.16  4.17  4.18  4.19  4.2   4.21  4.22  4.23
4.24  4.25  4.26  4.27  4.28  4.29  4.3   4.31  4.32  4.33  4.34  4.35
4.36  4.37  4.38  4.39  4.4   4.41  4.42  4.43  4.44  4.45  4.46  4.47
4.48  4.49  4.5   4.51  4.52  4.53  4.54  4.55  4.56  4.57  4.58  4.59
4.6   4.61  4.62  4.63  4.64  4.65  4.66  4.67  4.68  4.69  4.7   4.71
4.72  4.73  4.74  4.75  4.76  4.77  4.78  4.79  4.8   4.81  4.82  4.83
4.84  4.85  4.86  4.87  4.88  4.89  4.9   4.91  4.92  4.93  4.94  4.95
4.96  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]
[-5.   -4.99 -4.98 ...,  4.97  4.98  4.99]]
------------------
[[-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]]
[[ 7.0711  7.064   7.0569 ...,  7.0499  7.0569  7.064 ]
[ 7.064   7.0569  7.0499 ...,  7.0428  7.0499  7.0569]
[ 7.0569  7.0499  7.0428 ...,  7.0357  7.0428  7.0499]
...,
[ 7.0499  7.0428  7.0357 ...,  7.0286  7.0357  7.0428]
[ 7.0569  7.0499  7.0428 ...,  7.0357  7.0428  7.0499]
[ 7.064   7.0569  7.0499 ...,  7.0428  7.0499  7.0569]]

Process finished with exit code 0


Expressing conditional logic as array operations

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

print(xarr[~cond])

# 二者等价
# np.where 是三元表达式 x if condition else y 的矢量化版本
# result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
result = np.where(cond, xarr, yarr)
print(result)

arr = np.random.randn(4, 4)
# 大于 0 的替换为 2, 否则替换为 -2
arr_1 = np.where(arr > 0, 2, -2)
print(arr_1)
# 大于 0 的替换为 2, 否则 保留原值
arr_2 = np.where(arr > 0, 2, arr) # set only positive values to 2
print(arr_2)


[ 1.2  1.5]
[ 1.1  2.2  1.3  1.4  2.5]
[[ 2  2  2 -2]
[-2  2 -2  2]
[ 2 -2 -2 -2]
[ 2 -2 -2 -2]]
[[ 2.      2.      2.     -0.572 ]
[-0.0768  2.     -1.0821  2.    ]
[ 2.     -0.9678 -0.1732 -1.0441]
[ 2.     -0.4337 -0.7777 -0.8902]]

Process finished with exit code 0


Mathematical and statistical methods

arr = np.random.randn(5, 4) # normally-distributed data
print(arr.mean())
print(np.mean(arr))
print(arr.sum())

# mean 和 sum 可以接受一个 axis 参数(用于计算该轴向上的统计值),最终结果是一个少一维的数组
print(arr.mean(axis=1))
print(arr.sum(0))

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
print(arr)
print(arr.cumsum(0))
print(arr.cumsum(1))
print(arr.cumprod(1))


-0.10294284368
-0.10294284368
-2.0588568736
[-0.7362  0.3252 -0.5837  0.5134 -0.0333]
[-2.5793  1.8575  1.2828 -2.6199]
[[0 1 2]
[3 4 5]
[6 7 8]]
[[ 0  1  2]
[ 3  5  7]
[ 9 12 15]]
[[ 0  1  3]
[ 3  7 12]
[ 6 13 21]]
[[  0   0   0]
[  3  12  60]
[  6  42 336]]

Process finished with exit code 0


Methods for boolean arrays

arr = np.random.randn(100)
print((arr > 0).sum()) # Number of positive values
print(arr[arr>0])

bools = np.array([False, False, True, False])
# any 用于检测数组中是否存在一个或多个True 存在
# all 检查数组中是否所有值都是 True
bools.any()
bools.all()
# -----------------------------------------


51
[ 1.0179  0.4661  0.035   0.3081  0.5339  1.9648  0.4265  1.942   1.2556
0.1283  2.0778  0.2201  0.732   0.8652  1.0453  0.1707  0.3444  0.1044
0.8468  0.071   0.2321  0.3639  0.1994  1.3033  0.8468  0.7713  2.0785
0.9529  1.6031  0.157   0.5425  0.0212  0.659   0.6765  0.3032  1.8217
4.0663  0.107   0.4904  0.9526  0.8232  0.9066  1.0254  0.2625  1.4222
0.6134  0.7314  1.1774  0.0021  0.3598  2.4056]

Process finished with exit code 0


Sorting

arr = np.random.randn(8)
print(arr)
arr.sort()
print(arr)

arr = np.random.randn(2,5)
print(arr)
# 升序排列,按行排列
arr.sort()
print(arr)

arr.sort(1)
print(arr)

arr.sort(0)
print(arr)

large_arr = np.random.randn(1000)
large_arr.sort()
# 5%分位数
print(large_arr[int(0.05 * len(large_arr))]) # 5% quantile


[ 1.2906  0.7066 -3.3     0.126  -1.3173 -0.2734 -0.7938 -0.9861]
[-3.3    -1.3173 -0.9861 -0.7938 -0.2734  0.126   0.7066  1.2906]
[[ 0.6627 -0.3837  0.8278 -0.4906  0.8111]
[ 0.4463 -0.3823 -1.0958  0.4684 -0.4863]]
[[-0.4906 -0.3837  0.6627  0.8111  0.8278]
[-1.0958 -0.4863 -0.3823  0.4463  0.4684]]
[[-0.4906 -0.3837  0.6627  0.8111  0.8278]
[-1.0958 -0.4863 -0.3823  0.4463  0.4684]]
[[-1.0958 -0.4863 -0.3823  0.4463  0.4684]
[-0.4906 -0.3837  0.6627  0.8111  0.8278]]
-1.63847027424

Process finished with exit code 0


Unique and other set logic

# np.unique()用于找出数组中的唯一值,并返回已排序的结果
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))
ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
print(np.unique(ints))

# np.in1d() 用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组
values = np.array([6, 0, 0, 3, 2, 5, 6])
print(np.in1d(values, [2, 3, 6]))
print(np.in1d([2, 3, 6], values))


['Bob' 'Joe' 'Will']
[1 2 3 4]
[ True False False  True  True False  True]
[ True  True  True]

Process finished with exit code 0


Linear algebra

np.random.seed(12345)

from numpy.linalg import inv, qr
X = np.random.randn(5, 5)
print(X)
# 转置
print(X.T)
mat = X.T.dot(X)

print(mat)
# 矩阵的逆
print(inv(mat))

mat.dot(inv(mat))
q, r = qr(mat)
print(r)


[[-0.2047  0.4789 -0.5194 -0.5557  1.9658]
[ 1.3934  0.0929  0.2817  0.769   1.2464]
[ 1.0072 -1.2962  0.275   0.2289  1.3529]
[ 0.8864 -2.0016 -0.3718  1.669  -0.4386]
[-0.5397  0.477   3.2489 -1.0212 -0.5771]]
[[-0.2047  1.3934  1.0072  0.8864 -0.5397]
[ 0.4789  0.0929 -1.2962 -2.0016  0.477 ]
[-0.5194  0.2817  0.275  -0.3718  3.2489]
[-0.5557  0.769   0.2289  1.669  -1.0212]
[ 1.9658  1.2464  1.3529 -0.4386 -0.5771]]
[[  4.075   -3.3059  -1.3073   3.4466   2.6197]
[ -3.3059   6.1523   1.7149  -4.3193  -0.0938]
[ -1.3073   1.7149  11.1187  -3.3702  -2.0097]
[  3.4466  -4.3193  -3.3702   4.7812   0.0331]
[  2.6197  -0.0938  -2.0097   0.0331   7.7736]]
[[ 3.0361 -0.1808 -0.6878 -2.8285 -1.1911]
[-0.1808  0.5035  0.1215  0.6702  0.0956]
[-0.6878  0.1215  0.2904  0.8081  0.3049]
[-2.8285  0.6702  0.8081  3.4152  1.1557]
[-1.1911  0.0956  0.3049  1.1557  0.6051]]
[[ -6.9271   7.389    6.1227  -7.1163  -4.9215]
[  0.      -3.9735  -0.8671   2.9747  -5.7402]
[  0.       0.     -10.2681   1.8909   1.6079]
[  0.       0.       0.      -1.2996   3.3577]
[  0.       0.       0.       0.       0.5571]]

Process finished with exit code 0


Random Walks

nsteps = 1000

# 生成 1000 个 或为 0 ,或者为 1 的随机数
draws = np.random.randint(0, 2, size=nsteps)
# print(draws)

# 将 draws 中的 0 转换为 -1,将 1 转换为 0
steps = np.where(draws > 0, 1, -1)
print(steps)

walk = steps.cumsum()
print(walk)

print(walk.min())
print(walk.max())
# argmax() 返回该布尔型数组第一个最大值得索引(True就是最大值)
print((np.abs(walk) >= 10).argmax())


[ 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 -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 -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 -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  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  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  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 -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  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  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 -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  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 -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  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  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 -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 -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  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 -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 -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  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  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 -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 -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  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
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 -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 -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   2   1   0   1   2   1   2   1   0  -1  -2  -3  -4  -5  -4  -3  -2
-3  -2  -1   0   1   2   1   2   3   4   3   2   3   2   3   4   3   2
1   0  -1  -2  -1  -2  -1  -2  -1   0  -1  -2  -1  -2  -1  -2  -1  -2
-1   0  -1  -2  -1   0   1   2   3   4   3   4   5   6   7   8   9  10
9  10  11  12  13  14  13  12  13  14  13  12  11  10  11  12  13  14
13  12  13  12  13  14  15  16  17  18  19  18  19  18  17  18  19  20
19  18  17  16  17  18  17  18  19  20  19  18  19  18  19  20  19  20
19  18  17  18  19  20  19  18  19  18  17  16  17  16  15  16  17  18
19  18  19  18  19  20  19  18  19  18  19  20  21  20  21  22  21  22
23  22  23  22  23  24  23  24  23  22  23  24  23  22  21  20  19  18
19  20  19  20  19  20  19  18  17  16  17  18  17  18  19  20  21  20
21  22  21  22  21  20  19  18  19  18  17  18  17  16  15  16  17  18
19  18  17  16  15  14  15  16  17  18  17  18  17  18  19  18  17  16
15  14  15  14  13  12  11  12  11  10   9   8   7   8   7   8   7   8
7   6   5   4   5   4   5   4   5   6   7   6   7   8   7   8   7   8
7   8   7   6   7   6   5   4   3   2   3   2   1   0   1   2   3   4
5   4   5   4   5   6   7   6   5   4   3   2   1   0  -1   0   1   2
3   2   1   0   1   0  -1   0   1   2   1   2   3   2   3   2   1   0
1   2   1   0   1   0  -1   0  -1   0  -1  -2  -3  -2  -1   0  -1  -2
-3  -4  -3  -2  -1  -2  -3  -4  -5  -6  -5  -4  -5  -6  -7  -6  -7  -6
-7  -6  -5  -4  -5  -4  -5  -6  -5  -6  -5  -6  -7  -6  -7  -8  -7  -8
-7  -6  -7  -8  -7  -6  -5  -4  -3  -4  -5  -6  -7  -6  -7  -6  -5  -4
-3  -4  -3  -2  -1   0  -1  -2  -1   0  -1   0   1   0   1   0   1   2
3   2   1   0   1   2   1   0  -1   0   1   0   1   0  -1   0   1   0
-1   0  -1  -2  -1   0  -1  -2  -3  -4  -5  -4  -5  -6  -7  -6  -7  -6
-5  -6  -5  -6  -7  -8  -7  -8  -7  -8  -9 -10 -11 -10 -11 -12 -11 -10
-9  -8  -7  -8  -7  -8  -9  -8  -9 -10  -9 -10  -9  -8  -7  -8  -7  -6
-5  -4  -3  -4  -3  -2  -3  -2  -1  -2  -1  -2  -1   0  -1  -2  -1  -2
-1  -2  -1   0  -1  -2  -3  -2  -1   0   1   0   1   0   1   0  -1   0
-1  -2  -3  -2  -3  -4  -3  -4  -5  -6  -5  -6  -7  -6  -7  -8  -7  -8
-9 -10 -11 -10 -11 -12 -11 -12 -11 -10 -11 -10 -11 -10 -11 -10  -9 -10
-9 -10  -9  -8  -9  -8  -9 -10  -9  -8  -9 -10 -11 -12 -11 -10 -11 -12
-13 -14 -15 -14 -15 -14 -13 -12 -13 -14 -15 -16 -17 -18 -17 -16 -17 -18
-17 -18 -19 -20 -19 -18 -17 -16 -15 -16 -15 -14 -13 -12 -13 -12 -13 -12
-11 -10 -11 -12 -11 -10  -9 -10 -11 -10 -11 -10  -9 -10  -9 -10  -9  -8
-7  -8  -7  -8  -9 -10 -11 -12 -11 -10  -9 -10 -11 -10  -9  -8  -9 -10
-11 -12 -13 -12 -13 -12 -13 -12 -13 -12 -11 -12 -13 -12 -13 -12 -11 -10
-11 -10  -9 -10 -11 -12 -13 -12 -13 -12 -11 -12 -13 -12 -13 -14 -13 -12
-13 -12 -11 -10  -9  -8  -9  -8  -9  -8  -9  -8  -9 -10 -11 -12 -13 -14
-15 -14 -15 -16 -17 -18 -19 -20 -19 -20 -19 -20 -19 -20 -19 -18 -17 -16
-15 -16 -17 -18 -17 -16 -17 -16 -15 -16 -15 -16 -17 -18 -17 -18 -19 -20
-21 -20 -21 -20 -19 -20 -19 -20 -21 -20 -19 -20 -19 -18 -19 -20 -21 -22
-21 -20 -21 -20 -21 -20 -21 -20 -21 -22 -23 -22 -23 -22 -21 -22 -23 -24
-25 -26 -25 -24 -25 -24 -23 -22 -23 -22 -21 -22 -21 -22 -21 -20 -21 -20
-21 -22 -21 -20 -21 -20 -19 -18 -17 -16 -15 -16 -15 -14 -13 -12 -13 -12
-11 -12 -11 -10 -11 -12 -13 -14 -15 -16 -15 -14 -15 -16 -15 -16 -15 -16
-17 -18 -17 -18 -19 -20 -21 -22 -21 -20 -21 -20 -21 -22 -21 -20 -21 -20
-19 -18 -17 -18 -17 -16 -15 -14 -15 -14 -15 -14 -13 -14 -13 -14 -13 -14
-13 -14 -15 -16 -15 -14 -13 -14 -13 -14 -15 -14 -13 -12 -11 -10  -9  -8
-9  -8  -7  -8  -7  -8  -7  -8  -7  -6  -7  -8  -7  -6  -7  -8  -9 -10
-9  -8  -7  -6  -7  -8  -9  -8  -7  -6  -7  -8  -9 -10  -9  -8  -7  -8
-9 -10  -9  -8  -7  -6  -7  -8  -7  -8  -9  -8  -9  -8  -9  -8  -7  -8
-9 -10  -9 -10 -11 -10  -9 -10  -9  -8  -7  -8  -7  -6  -7  -8  -7  -8
-9 -10  -9  -8  -9 -10  -9  -8  -7  -6  -7  -6  -7  -6  -7  -6  -7  -6
-7  -6  -5  -6  -5  -6  -5  -4  -3  -4  -5  -4  -5  -4  -3  -2  -1  -2
-1   0   1   0   1   2   1   0   1   0]
-26
24
71

Process finished with exit code 0


Simulating many random walks at once

nwalks = 5000
nsteps = 1000
draws = np.random.randint(0, 2, size=(nwalks, nsteps)) # 0 or 1
steps = np.where(draws > 0, 1, -1)
# 行累加
walks = steps.cumsum(1)
print(walks)

walks.max()
walks.min()

# 以行为轴
hits30 = (np.abs(walks) >= 30).any(1)
print(hits30)
print(hits30.sum()) # Number that hit 30 or -30

# 每行中,最大数的索引
crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1)
print(crossing_times)
print(crossing_times.mean())


[[ -1  -2  -3 ...,  42  41  42]
[ -1   0   1 ...,   6   7   8]
[  1   0   1 ...,  38  37  36]
...,
[  1   0  -1 ...,  -6  -5  -6]
[ -1  -2  -3 ..., -18 -19 -18]
[  1   2   3 ...,   0   1   2]]
[ True  True  True ..., False  True  True]
3374
[913 397 697 ..., 241 715 313]
499.988737404

Process finished with exit code 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: