python - 从矩阵中删除特定值

标签 python

我想从矩阵中删除所有零,因此将删除包含零的每一行或每一列。 像这样: 输入是这个矩阵:

np.array([
     [1, 2, 3, 4, 5],
     [6, 0, 8 ,9,10],
    [11,12,13,14,15],
    [16, 0, 0,19,20]])

三个零应该导致第 1 和第 3 行(从零开始的索引)和第 1 和第 2 列被删除。输出矩阵应为:

np.array([
    [ 1, 4, 5],
    [11,14,15]])

到目前为止我试过这个:

for i in range(0,len(Matrix)):
    Matrix[Matrix[:,i]!=0]
for i in range(len(Matrix),0):
    Matrix[Matrix[i,:]!=0]

最佳答案

您可以使用 np.ix_ 来处理索引魔法:

In [26]: arr = np.array([[1,2,3,4,5],[6,0,8,9,10],[11,12,13,14,15],[16,0,0,19,20]])

In [27]: mask = arr != 0

In [28]: arr[np.ix_(mask.all(1), mask.all(0))]
Out[28]: 
array([[ 1,  4,  5],
       [11, 14, 15]])

有问题的索引魔术是 np.ix_ 会将 bool 数组转换为每个轴的正确索引:

In [29]: mask.all(1)
Out[29]: array([ True, False,  True, False])

In [30]: mask.all(0)
Out[30]: array([ True, False, False,  True,  True])

In [31]: np.ix_(mask.all(1), mask.all(0))
Out[31]: 
(array([[0],
        [2]]), array([[0, 3, 4]]))

这真的一点也不神奇,它很有效

In [34]: np.arange(len(mask.all(1)))[mask.all(1)]
Out[34]: array([0, 2])

在幕后。

关于python - 从矩阵中删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710872/

相关文章:

具有相对路径的 Python3 importlib.util.spec_from_file_location?

python - 通过 boolean 掩码数组选择numpy数组的元素

python - 如何在 Plone 中直接发布我的 Container 类型的子项目?

python - 使用 Get2D 在 OpenCV 中访问二维像素值时出现超出范围错误或返回值错误

python - 用 Python 制作音乐笔记

python - 使用 SMTP 从 Python 发送邮件

python - caffe 深度学习中 var.diff[...] = 0 是什么意思?

python - 如何将 numpy 矩阵转换为 bool 矩阵?

python - 使用cursor.fetchall()返回空数据框

python - 如何根据 pandas 中出现次数最多的组合填写值?