【问题标题】:Identifying deleted rows and columns of an array in Python在 Python 中识别数组中已删除的行和列
【发布时间】:2023-02-09 18:23:22
【问题描述】:

我有一个数组 A1。我正在删除零行和零列,但我还想确定删除了哪一行和哪一列。我展示了当前和预期的输出。

import numpy as np

        
A1=np.array([[0, 1, 2],
            [0, 0, 0],
            [0, 3, 4]])

mask = A1!= 0
A2 = A1[np.ix_(mask.any(1), mask.any(0))]
print([A2])

当前输出是

[array([[1, 2],
       [3, 4]])]

预期的输出是

[array([[1, 2],
       [3, 4]])]
[1] where 1 is the deleted row, 
[0] where 0 is the deleted column  

【问题讨论】:

  • 你当前的输出和预期的输出是一样的,为什么?
  • 这是不一样的,因为当前输出没有告诉删除了哪一行和哪一列。它仅呈现删除行和列后获得的最终数组,
  • 如果你的 A1 数组没有整行零行/列,比如 np.array([[0, 1, 0], [0, 0, 1], [1, 3, 0]]) 怎么办?

标签: python numpy


【解决方案1】:

这是获取所需输出的代码:

import numpy as np

A1=np.array([[0, 1, 2],
            [0, 0, 0],
            [0, 3, 4]])

mask = A1 != 0
deleted_rows = np.where(~mask.any(axis=1))[0]
deleted_columns = np.where(~mask.any(axis=0))[0]
A2 = A1[np.ix_(mask.any(1), mask.any(0))]

print([A2])
print("Deleted rows:", deleted_rows)
print("Deleted columns:", deleted_columns)

结果:

array([[1, 2],
       [3, 4]])]
Deleted rows: [1]
Deleted columns: [0]

【讨论】:

    【解决方案2】:

    如果您删除的行和列都具有相同的值,在您的情况下为 0,您可以执行以下操作:

    deletedrows = [i for i in range(A1.shape[0]) if np.all(A1[i] == 0)]
    deletedcolumns = [i for i in range(A1.T.shape[0]) if np.all(A1.T[i] == 0)]
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多