如何从产生两个二维数组输出的函数的 1 个输出中选择 1 行数据

问题描述

对于上下文,我有一个输出两个二维数组的二维随机游走函数。这两个数组表示 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)