首页 > 解决方案 > 从二维数组python中删除行(IndexError)

问题描述

我有一个二维数组

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: index 225 is out of bounds for axis 1 with size 225

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

标签: pythonarraysnumpy

解决方案


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

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

您可以使用以下方法过滤数组:

data2 = data[minima >= threshold]

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

data2 = data[data.min(axis=1) >= threshold]

推荐阅读