我已经实现了从 Python 2.7 中的 ndarray 中删除一些列和行的算法,但是我觉得应该有更好的方法来做到这一点。可能我不知道如何在 Python 中做得很好,这就是我把问题放在这里的原因。我一直在搜索,但我没有成功找到类似的问题和文档(例如在scipy 切片和索引文档中)
假设我有一个包含一些行和列的 ndarray:
number_of_rows = 3
number_of_columns = 3
a = np.arange(number_of_rows*number_of_columns).reshape(number_of_rows,number_of_columns)
a
哪个输出是:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
假设我想删除前一个 ndarray 的一些列和/或行。特别是我想删除第 0 列和第 1 行,这是一个输出,如:
array([[1, 2],
[7, 8]])
为此,我遵循以下步骤,但是它们看起来也不是很优雅,我觉得它们应该是一个更好的实现。
我选择要删除的列和行,在此示例中:
rows_to_remove = [1] columns_to_remove = [0]
现在我创建了几个列表,其中包含要保留的列和行。
rows_to_keep = list(set(range(0,a.shape[0]))-set(rows_to_remove)) columns_to_keep = list(set(range(0,a.shape[1]))-set(columns_to_remove))
Matlab 中的这一步将更简单,只需使用 ~ 来分割矩阵的索引(在 python ndarray 中)。有一个更好的方法吗?.
然后我选择要保留的那些列和行:
a[rows_to_keep,:][:,columns_to_keep]
输出:
array([[1, 2],
[7, 8]])
请注意,如果您只写:
a[rows_to_keep,columns_to_keep]
输出是:
array([1, 8])
这对我来说有点令人毛骨悚然,这a[rows_to_keep,columns_to_keep]
与a[rows_to_keep,:][:,columns_to_keep]
.
有没有更好的方法来涵盖这些步骤?
非常感谢你