使用numpy.ete()或任何其他函数从列表/数组列表中删除

wlzqhblo  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(108)

我有以下清单,让我们称之为R:

[(array([[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]]),
  array([100, 101, 102])),
 (array([[10, 11, 12],
         [13, 14, 15],
         [16, 17, 18]]),
  array([103, 104, 105]))]

我希望能够基于索引i删除for循环中的R列。例如,如果i=3,则应该删除第3列,这应该产生以下新的结果,比如r1:

[(array([[1, 2],
             [4, 5],
             [7, 8]]),
      array([100, 101])),
     (array([[10, 11],
             [13, 14],
             [16, 17]]),
      array([103, 104]))]

我没有处理这种多维数组的经验,所以我不确定如何使用numpy.ete()。我的实际列表R很大,所以如果有人能建议如何进行循环,我将不胜感激。

jv4diomz

jv4diomz1#

您可以将np.deletecol==2axis=-1一起使用。


# if your 'list' be like below as you say in the question :

print(lst)

# [

# array([[1, 2, 3],

# [4, 5, 6],

# [7, 8, 9]]),

# array([100, 101, 102]),

# array([[10, 11, 12],

# [13, 14, 15],

# [16, 17, 18]]),

# array([103, 104, 105])

# ]

for idx, l in enumerate(lst):
    lst[idx] = np.delete(l, 2, axis=-1)

print(lst)

产出:

[
    array([[1, 2],
           [4, 5],
           [7, 8]]), 
    array([100, 101]), 
    array([[10, 11],
           [13, 14],
           [16, 17]]), 
    array([103, 104])
]

创建输入数组,如问题所示:

import numpy as np

lst  = [[[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]],
        [100, 101, 102],
        [[10, 11, 12],
         [13, 14, 15],
         [16, 17, 18]],
        [103, 104, 105]
       ]

lst = [np.array(l) for l in lst]

更新基本评论,如果你的list中有tuplenp.array,你可以尝试如下:

lst = [
    (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), np.array([100, 101, 102])), 
    (np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]]), np.array([103, 104, 105]))
]

for idx, tpl  in enumerate(lst):
    lst[idx] = tuple(np.delete(l, 2, axis=-1) for l in tpl)

print(lst)

产出:

[
    (array([[1, 2],
            [4, 5],
            [7, 8]]), 
     array([100, 101])
    ), 
    (array([[10, 11],
            [13, 14],
            [16, 17]]), 
     array([103, 104]))
]

相关问题