匹配位置时从np.array中删除特定项目

时间:2018-10-13 12:03:15

标签: python arrays numpy

对于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)

绘制每个粒子

1 个答案:

答案 0 :(得分:0)

摘要:

np.delete(position_x, position_x[z])

不起作用,因为函数numpy.delete不会对给定的数组对象进行更改,而是返回一个没有删除元素的新数组。

所以您的代码应这样写:

position_x = np.delete(position_x, position_x[z])