我如何 select 来自产生两个二维数组输出的函数的 1 个输出的 1 行数据
how do I select 1 row of data from 1 output of a function that produces two 2d array outputs
对于上下文,我有一个 2D Random walker 函数,它输出两个 2d 数组。这两个数组表示 x 位置和 y 位置。
这两个数组都是二维的,因为列数代表粒子数(100 列是 100 个粒子),行数代表每个粒子采取的步骤(100 步是 100 行)。
问题:我如何 select 仅使用 x 位置 2d 数组来绘制第 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,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,50,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]
这 select 是 f() 的第一个输出,因为 python 从 0
开始索引
为了select我们想要的行和列我们使用索引(对于二维数组)
Rows/columns_we_want= Histo2d[50][:500]
[50] 是第 50 步的行 & [:500] 其中:表示所有列最多 500(即 500 个粒子)。
无花果 = plt.figure().
ax1.hist(Rows/columns,bins=20,density=True)
对于上下文,我有一个 2D Random walker 函数,它输出两个 2d 数组。这两个数组表示 x 位置和 y 位置。 这两个数组都是二维的,因为列数代表粒子数(100 列是 100 个粒子),行数代表每个粒子采取的步骤(100 步是 100 行)。
问题:我如何 select 仅使用 x 位置 2d 数组来绘制第 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,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,50,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]
这 select 是 f() 的第一个输出,因为 python 从 0
开始索引为了select我们想要的行和列我们使用索引(对于二维数组)
Rows/columns_we_want= Histo2d[50][:500]
[50] 是第 50 步的行 & [:500] 其中:表示所有列最多 500(即 500 个粒子)。
无花果 = plt.figure().
ax1.hist(Rows/columns,bins=20,density=True)