删除numpy数组的最后n个元素仅在某些情况下有效

时间:2018-02-08 13:25:56

标签: python arrays numpy

我正在研究以下脚本,它被设想为稍后插入一个while循环,其中我有一个总“x”计数器(tot_x),不得超过允许的最大“x”(max_x)值。 tot_x意味着在每次迭代时通过向其添加numpy数组的大小来更新,其中“a”是示例。如果“a”的大小使得tot_x超过阈值,我想创建一个更短版本的数组“a”,称为“b”,它完全符合max_x和tot_x之间的剩余差距。这是代码:

import numpy as np

tot_x = 200
max_x = 300

a = np.arange(1030,1200)
tot_x = tot_x + a.size

if tot_x > max_x:
    b = a[:-(a.size-(max_x-tot_x))]
    tot_x = (tot_x-a.size) + b.size

问题在于,如果我按原样运行代码,则“b”数组未正确创建,即它的维度为0,而如果我删除了tot_x和if语句的更新,则“ b“数组完全按照我的意愿创建。以下是“b”数组的代码示例:

import numpy as np

tot_time = 200
max_time = 300

a = np.arange(1030,1200)
b = a[:-(a.size-(max_time-tot_time))]
tot_time = (tot_time-a.size) + b.size

问题出在哪里? 非常感谢

1 个答案:

答案 0 :(得分:0)

两者之间的主要区别在于if语句,它是tot_x / tot_time的值。您在第一个中重新分配tot_xtot_x + a的值,但不是第二个。因此,即使if语句中的代码被命中,它也会计算为b = a[:-240],这正确地评估为空数组。

我认为您可以通过将b = a[:-(a.size-(max_x-tot_x))]替换为b = a[:-(a.size-(tot_x-max_x))]来完成您所追求的目标。希望有所帮助!