对于Python程序“盒子中的粒子”,我需要在x,y平面中插入一个间隙。我在numpy数组中跟踪每个粒子的x和y位置以及速度的x和y分量。
我有两个错误。
1)positie_y[z] <= 0 and positie_x[z] > 0.8 and positie_x[z] < 0.9
不能用于numpy数组。我是numpy数组的新手,所以请解释如何使用any()或all()或其他选项?
2)np.delete
不起作用:粒子没有消失。是因为我没有正确使用它,还是还有另一种方法?
def particles(n, gap):
dt = 0.01
position_x = []
position_y = []
speed_x = []
speed_y = []
for i in range(n):
alpha = random.random() * 360
speed = (0.1)*random.random() * alpha
speed_x.append(math.sin(snelheid))
speed_y.append(math.cos(snelheid))
position_x.append(0.25)
position_y.append(0.75)
position_x = np.array(position_x)
position_y = np.array(position_y)
speed_x = np.array(speed_x)
speed_y = np.array(speed_y)
直到这里,它都可以正常工作。问题出在以下代码中。
while True:
position_x = position_x + speed_x * dt
position_y = position_y + speed_y * dt
# 'z' is the position number of the particle in the numpy array.
for z in range(0, n):
# Gap == 1 means there is a gap.
if gap == 1:
# The gap is at y = 0 and 0.8 < x < 0.9
if position_y[z] <= 0 and position_x[z] > 0.8 and position_x[z] < 0.9:
np.delete(position_x, position_x[z])
np.delete(position_y, position_y[z])
np.delete(speed_x, speed_x[z])
np.delete(speed_y, speed_y[z])
之后,我将用plt.plot(positie_x, positie_y, 'ro')
和particles(100, 1)
答案 0 :(得分:0)
摘要:
np.delete(position_x, position_x[z])
不起作用,因为函数numpy.delete不会对给定的数组对象进行更改,而是返回一个没有删除元素的新数组。
所以您的代码应这样写:
position_x = np.delete(position_x, position_x[z])