问题描述
对于上下文,我有一个输出两个二维数组的二维随机游走函数。这两个数组表示 x 位置和 y 位置。 这两个数组都是二维的,因为列数代表粒子数(100 列是 100 个粒子),行数代表每个粒子所走的步数(100 步是 100 行)。
问题:我如何只选择 x 位置的二维数组来绘制第 50 行(50 步)和第 50 行的所有列(500),以便绘制直方图?
以下是我所做的尝试。其中particle_motion_2D(500,50,20) 是函数。 500 是粒子数,50 步,20 框宽(这对问题不重要)
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import random as rd
import math as m
def particle_motion_2D(P_xy,Steps,bwidth):
X_Steps=[0,-1,1]
Y_Steps=[0,1]
P_x= np.zeros(P_xy)
P_y= np.zeros(P_xy)
States_Px=np.array([P_x])
States_Py=np.array([P_y])
for a in range(Steps):
Box_Max_x=np.where(P_x >= bwidth/2)
Box_Min_x=np.where(P_x <= -bwidth/2)
Box_Max_y=np.where(P_y >= bwidth/2)
Box_Min_y=np.where(P_y <= -bwidth/2)
P_Mnt_x=np.array([rd.choice(X_Steps) for i in P_x])
P_Mnt_y=np.array([rd.choice(Y_Steps) for i in P_y])
P_Mnt_x[Box_Max_x]=-1
P_Mnt_x[Box_Min_x]=+1
P_Mnt_y[Box_Max_y]=-1
P_Mnt_y[Box_Min_y]=+1
P_x= P_x + P_Mnt_x
P_y= P_y + P_Mnt_y
States_Px = np.append(States_Px,[P_x],axis=0)
States_Py = np.append(States_Py,[P_y],axis=0)
return States_Px,States_Py
Particle_RdWalk2D=particle_motion_2D(500,20)
Histo2d=Particle_RdWalk2D[50][0]
fig = plt.figure()#Plotting.
ax1.hist(Histo2d,bins=20,density=True)
解决方法
我认为这是一个解决方案:
Particle_RdWalk2D=particle_motion_2D(500,50,20)
Histo2d=Particle_RdWalk2D[0]
这会选择 f() 的第一个输出作为 Python 索引从 0 开始
为了选择我们想要的行和列,我们使用索引(对于二维数组)
Rows/columns_we_want= Histo2d[50][:500]
[50] 是第 50 步和 [:500] 的行,其中 : 表示最多 500(即 500 个粒子)的所有列。
fig = plt.figure().
ax1.hist(Rows/columns,bins=20,density=True)