Для контекста у меня есть функция 2D Random walker, которая выводит два 2D-массива. Два массива представляют позицию x и позицию y. Оба этих массива являются двумерными, потому что количество столбцов представляет количество частиц (100 столбцов — это 100 частиц), а количество строк — количество шагов, предпринятых каждой частицей (100 шагов — это 100 строк).
Вопрос: как выбрать только массив x position 2d для построения 50-й строки (50 шагов) и всех столбцов (500) для этой 50-й строки, чтобы построить гистограмму?
Ниже попытка, которую я сделал. Где частица_движения_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)
Полностью перефразировал сообщение и ответ
Пожалуйста, опубликуйте актуальную MCVE
опубликовал MCVE, чтобы другие могли его запустить
Я думаю, что это решение:
Particle_RdWalk2D=particle_motion_2D(500,50,20)
Histo2d=Particle_RdWalk2D[0]
Это выбирает 1-й вывод f() как индексы python от 0
Чтобы выбрать нужные строки и столбцы, мы используем индексирование (для массива 2d).
Строки/столбцы_we_want= Histo2d[50][:500]
[50] — это строка с шагом 50 и [:500], где : означает все столбцы до 500 (т. е. 500 частиц).
рис = plt.figure().
ax1.hist (строки/столбцы, ячейки = 20, плотность = истина)
Лол в np.cumsum, скорее всего. Я не знаю, что вы на самом деле спрашиваете.