首页 > 解决方案 > python中两个数字之间的数组中的值

问题描述

所以制作一个真正解释我想要的标题比我想象的要难,所以我来解释一下。

我有一个用零填充的数组,每次满足条件时都会添加值,所以在 1 个时间步迭代之后,我得到了这样的结果(减去标题):

当前数组 =

bubble_size y_coord
14040       42
3943        71
6345        11
0           0
0           0
....

在此时间步完成后,此 current_array 被设置为 previous_array 并用零擦除,因为每次都没有保证的条目数。

现在真正的问题是我希望能够检查previous_array的第一列中的所有行,看看当前气泡大小是否在任何一边的5%以内,如果是,我想把当前的y位置拿走与previous_array 的第二列中匹配的气泡大小编号相关联。

目前我有类似的东西;

if bubble_size in current_array[:, 0]:
    do_whatever

但我不知道如何在不使用循环的情况下提取关联的 y_coord,我可以这样做(数组大约有 100 行,至少有 1000 个时间步,所以我想让它尽可能高效)但是想避免

我已经包含了我对 for 循环的想法(注意 current 和 previous_array 实际上是 current 和 previous_frame)

for y in range (0, array_size):
    if bubble_size >> previous_frame[y,0] *.95 &&<< previous_frame[y, 0] *1.05:
        distance_travelled = current_y_coord - previous_frame[y,0]
        y = y + 1

任何帮助是极大的赞赏 :)

标签: pythonarraysperformancenumpy

解决方案


我可能在这里没有遇到您的问题,但是如果您想首先检查气泡大小是否在同一行元素之间 95 % 您可以使用以下命令:

import numpy as np

def apply(p, c):  # For each element check the bubblesize grow
    if(p*0.95 < c < p*1.05):
        return 1
    else:
        return 0


def dist(p, c):  # Calculate the distance
    return c-p

def update(prev, cur):
    assert isinstance(
        cur, np.ndarray), 'Current array is not a valid numpy array'
    assert isinstance(
        prev, np.ndarray), 'Previous array is not a valid numpy array'
    assert prev.shape == cur.shape, 'Arrays size mismatch'

    applyvec = np.vectorize(apply)
    toapply = applyvec(prev[:, 0], cur[:, 0])

    print(toapply)

    distvec = np.vectorize(dist)
    distance = distvec(prev[:, 1], cur[:, 1])

    print(distance)


current = np.array([[14040, 42],
                [3943,71],
                [6345,11],
                [0,0],
                [0,0]])

previous = np.array([[14039, 32],
                [3942,61],
                [6344,1],
                [0,0],
                [0,0]])

update(previous,current)

PS:请您根据我的示例告诉我们您要寻找的最终数组是什么?


推荐阅读