【问题标题】:Index error, delete row from array if column has a value索引错误,如果列有值,则从数组中删除行
【发布时间】:2013-09-22 09:30:27
【问题描述】:

我有一个包含四列的数组“x”。

对于每一行,如果第 4 列的值为 1,那么我想删除整行:

x = np.array([[1,2,3,0],[11,2,3,24],[1,22,3,1],[1,22,3,1], [5,6,7,8], [9,10,11,1]])
for i in range(0,len(x)):
    if x[i][4]==0:
        x=np.delete(x, i,0)

我收到以下错误:

回溯(最近一次通话最后一次):
文件“”,第 2 行,在
如果 x[i][4]==0:
IndexError:索引超出范围

【问题讨论】:

  • 附带说明,对于 numpy 数组,您通常希望使用 x[i, 4],而不是 x[i][4]。第一个版本直接访问元素,而不是访问行,然后向它询问元素,因此它可以更有效 - 但更重要的是,当您开始做更有趣的事情时它会更加灵活。
  • 另外,len(x) 是一件奇怪的事情。它确实有效,但是如果您想要特定轴的大小,请询问该轴的大小,而不是询问被视为行序列的数组的长度。
  • 如果您想要最后一项(列或行或其他),则无需计算行数并使用该数字:而是从末尾开始计数。如果有 4 个项目,则最后一个项目是 x[3]x[-1]

标签: python arrays numpy indexing


【解决方案1】:

列表的索引从0 开始。因此,由于有 4 个元素,因此索引为:0,1,2,3。因此,如果您必须检查第 4 个元素,请使用索引 3。

if x[i][3]==0:
     pass

这会起作用

【讨论】:

    【解决方案2】:

    你可以使用indexing:

    >>> x[x[:,3] != 1]
    array([[ 1,  2,  3,  0],
           [11,  2,  3, 24],
           [ 5,  6,  7,  8]])
    

    【讨论】:

    • @West1234 很高兴我能帮上忙。别忘了accept an answer
    • @West1234 如果不清楚,这仅显示列3 不等于1 的行。它不会将它们从数组中删除,因此稍后x 仍将拥有所有行。
    【解决方案3】:

    您试图用 [4] 引用第四列,但由于它是从零开始的,它实际上是 [3]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2018-12-26
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      相关资源
      最近更新 更多