社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在Python中从多维数组中删除行

VMEscoli • 5 年前 • 2396 次点击  

我试图删除我的numpy数组中符合特定条件的特定行。

这是一个例子:

a = np.array ([[1,1,0,0,1],
               [0,0,1,1,1],
               [0,1,0,1,1],
               [1,0,1,0,1],
               [0,0,1,0,1],
               [1,0,1,0,0]])

我希望能够删除所有行,其中特定列为零,这个数组可以大很多。 在本例中,如果前两个元素为零,或者后两个元素为零,则将删除行。

它可以是任何组合,不只是第一个或最后一个元素。

这应该是最后的:

a = np.array ([[1,1,0,0,1],
               [0,1,0,1,1],
               [1,0,1,0,1]]) 

例如,如果我尝试:

a[:,0:2] == 0

阅读后:

但他们似乎不适用于我的情况,或者可能我不理解这里的一些东西,因为没有任何工作我的情况。

这给了我所有的行,前两个是零,真,真

array([[False, False],
   [ True,  True],
   [ True, False],
   [False,  True],
   [ True,  True],
   [False,  True]])

最后两列为零,最后一行也应该删除最后我只剩下两排了。

 a[:,3:5] == 0

 array([[ True, False],
       [False, False],
       [False, False],
       [ True, False],
       [ True, False],
       [ True,  True]])

我试着做这样的事情,但是我现在不明白如何告诉它只给我符合条件的行,尽管这只是:

  (a[a[:,0:2]] == 0).all(axis=1)

      array([[ True,  True, False, False, False],
             [False, False,  True,  True, False],
             [False, False, False, False, False],
             [False, False, False, False, False],
             [False, False,  True,  True, False],
             [False, False, False, False, False]])


 (a[((a[:,0])& (a[:,1])) ] == 0).all(axis=1)

这说明一切都是假的

你能给我指点路吗? 谢谢您

再加上一个问题,在这种情况下,它并不总是前2个或后2个如果我的矩阵有35列,可能是第6列到第10列,然后是第20列和第25列。用户将能够决定要删除哪些列。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48529
 
2396 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Mstaino
Reply   •   1 楼
Mstaino    6 年前

使用以下掩码:

[np.any(a[:,:2], axis=1) & np.any(a[:,:-2], axis=1)]

如果要创建筛选视图:

a[np.any(a[:,:2], axis=1) & np.any(a[:,:-2], axis=1)]

如果要创建新数组:

np.delete(a,np.where(~(np.any(a[:,:2], axis=1) & np.any(a[:,:-2], axis=1))), axis=0)
Daniel Mesejo
Reply   •   2 楼
Daniel Mesejo    6 年前

如果我理解正确,你可以这样做:

import numpy as np

a = np.array([[1, 1, 0, 0, 1],
              [0, 0, 1, 1, 1],
              [0, 1, 0, 1, 1],
              [1, 0, 1, 0, 1],
              [0, 0, 1, 0, 1],
              [1, 0, 1, 0, 0]])

left = np.count_nonzero(a[:, :2], axis=1) != 0
a = a[left]

right = np.count_nonzero(a[:, -2:], axis=1) != 0
a = a[right]

print(a)

输出

[[1 1 0 0 1]
 [0 1 0 1 1]
 [1 0 1 0 1]]

或者,一个较短的版本:

left = np.count_nonzero(a[:, :2], axis=1) != 0
right = np.count_nonzero(a[:, -2:], axis=1) != 0
a = a[(left & right)]
zyxue
Reply   •   3 楼
zyxue    6 年前

试试这个

idx0 = (a[:,0:2] == 0).all(axis=1)

idx1 = (a[:,-2:] == 0).all(axis=1)

a[~(idx0 | idx1)]

前两步选择与筛选条件匹配的行的索引然后做一个 ( | )操作,以及 ( ~ )获取所需最终索引的操作。