将矩阵中的某些行设置为零

时间:2017-02-13 22:29:52

标签: numpy matrix comparison

在下面的代码中,m是numpy矩阵,absm是矩阵m的绝对值的矩阵副本。

m[absm < limit] = 0

如果相应的矩阵值是absm小于限制,我用它将m中的所有矩阵值都变为0。

这个工作正常,但是现在我想排除这段代码的前n行,如果它们在n行以下的行中,只能将值变为零,我不太清楚如何解决这个问题。

非常感谢

1 个答案:

答案 0 :(得分:1)

你可以为它创建一个掩码,假设你的矩阵是NxM,那么N就是行数:

row_mask = np.arange(N) >= n
m[(absm < limit) & row_mask[:, None]] = 0

这使用广播(注意[:,None]成语)来应用&amp; (按位,然而,相当于逻辑的布尔值)和原始掩码和行掩码。行掩码实际上是1d向量(形状(N,))无索引添加另一个维度,因此row_mask[:, None]是列向量(形状(N,1))。它的“薄”尺寸会自动扩展,以匹配您的矩形蒙版。