2.基于2.3节中随机游走的例子,使用ndarray和随机数生成函数模拟一个物体在三准空间随机游走的过程。
1)创建3×10的二维数组,记录物体每步在三个轴向上的移动距离。在每个轴向的移动距离服从标准正态分布(期望为0,方差为1)。行序0、1、2分别对应x轴、y轴和z轴。
2)计算每步走完后物体在三维空间的位置。
3)计算每步走完后物体到原点的距离(只显示两位小数)。
4)统计物体在z轴上到达的最远距离。
5)统计物体在三维空间距离原点的最近值。
附:三维空间随机游走轨迹作图
【提示】使用abs( )绝对值函数对z轴每步运动后的位置求绝对值,然后求最大距离。
#2三维空间随机游走
import numpy as np
#1)
movedists = np.random.normal(0,1,size = (3,10)) #random模块下的normal()函数生成x、y、z轴上三组正态分布随机数
print(movedists)
#2)
position = movedists.cumsum(axis = 1) #按行求累加和,计算每步走后的x、y与z轴的坐标位置
print(position)
#3)
dists = np.sqrt(position[0]**2+position[1]**2+position[2]**2) #根据每步位置坐标计算到原点的距离,用到sqrt()求平方根函数
np.set_printoptions(precision=2) #np.set_printoptions()函数设置显示的小数位数
print(dists)
#4)
print(np.abs(position[2]).max()) #abs()绝对值函数
#5)
print(dists.min())
【拓展——补充】:接综合练习题第2题,绘图展示物体三维空间游走轨迹(和上面代码相连)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D #调用Axes3D库
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False
x = position[0] #表示位置参数
y = position[1]
z = position[2]
fig = plt.figure(figsize = (12,8)) #创建绘图对象,figsize定义图形大小
ax = plt.axes(projection='3d') #创建三维坐标轴
ax.set_xlabel('X轴',fontsize = 15) #以下三行分别设置x轴、y轴与z轴标题与字号大小
ax.set_ylabel('Y轴',fontsize = 15)
ax.set_zlabel('Z轴',fontsize = 15)
ax.set_title( '物体在三维空间上一次随机游走轨迹图',fontsize = 20) #添加标题,设置字号
ax.plot(x,y,z,c = 'g',marker = '*') #画折线图
ax.scatter(0,0,0,c = 'b',marker = 'D') #单独画原点
ax.text(.1,-.1,.1,'origin',fontsize = 15) #添加原点说明文字
ax.scatter(x[0],y[0],z[0],c = 'r',marker = 'o') #单独画起点
ax.text(x[0]+.1,y[0]-.1,z[0]+.1,'start',fontsize = 15) #添加起点说明文字
ax.scatter(x[-1],y[-1],z[-1],c = 'r',marker = 'o') #单独画终点
ax.text(x[-1]+.1,y[-1]-.1,z[-1]+.1, 'stop',fontsize = 15) #添加终点说明文字
plt.show() #显示图
运行结果如下: