【问题标题】:Delete row from 2D array python (IndexError)从二维数组python中删除行(IndexError)
【发布时间】:2020-04-05 02:13:32
【问题描述】:

我有一个二维数组

data = [[1,2,3...], [4,5,6...], [7,8,9...], ...]

还有另一个一维数组,其中包含上面每个子数组的最小值:

minima= [1, 4, 7, ....]。因此len(minima) = len(data).

现在我想设置一个阈值,比如threshold = 7,并希望删除data 的每个子数组,最小值低于此阈值。所以我尝试了以下方法:

threshold = 7
for i in range(len(minima)):
    if minima[i] < threshold:
        data = np.delete(data, i, 1)

但这给了我一个IndexError: IndexError:索引 225 超出轴 1 的范围,大小为 225

我想这与轴有关,循环不是最好的方法,但我的专业知识非常有限。感谢您的帮助!

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

这将失败的原因是,如果您删除一行,那么行数会减少,但i 将继续增加,直到“old”行数。

但无论如何,使用循环每次删除一行并不是很效率。 Numpy 可以通过 bulk 进行操作来提高效率。通过迭代,您的算法可能不会比不使用 numpy 的简单 Python 程序快多少。

您可以只过滤数组,使用:

data2 = data[<b>minima &gt;= threshold</b>]

请注意,您不需要自己计算逐行最小值,您可以使用以下方法计算:

data2 = data[<b>data.min(axis=1)</b> &gt;= threshold]

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2018-12-26
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2010-12-20
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多