python迭代并从压缩数组列表中选择值

2024-04-25 13:52:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个多维数组被压缩到一个列表中,并试图根据应用于单个数组的选择标准从列表中删除值。具体来说,我有4个数组,它们都有相同的形状,它们都被压缩到一个数组列表中:

    in: array1.shape
    out: (5,3)
    ...
    in: array4.shape
    out: (5,3)

    in: array1
    out: ([[0, 1, 1],
          [0, 0, 1],
          [0, 0, 1],
          [0, 1, 1],
          [0, 0, 0]])

    in: array4
    out: ([[20, 16, 20],
          [15, 19, 17],
          [21, 24, 23],
          [22, 22, 26],
          [27, 24, 23]])
    in: fullarray = zip(array1,...,array4)

    in: fullarray[0]
    out: (array([0, 1, 1]), array([3, 4, 5]), array([33, 34, 35]), array([20, 16, 20]))

我尝试在每组数组中迭代来自单个目标数组的值,并在值等于20时从与目标数组具有相同索引的每个数组中选择值。我怀疑我解释得很清楚,所以我举个例子。在

^{pr2}$

我以前的尝试都生成了各种错误消息(示例如下)。任何帮助都将不胜感激。在

    in: for i in g:
          for n in i:
              if n == 3:
                 for k in n:
                     if k == 0:
                        newlist.append(i[k])

    out: for i in fullarray:
      2     for n in i:
----> 3         if n == 3:
      4             for k in n:
      5                 if k == 0:

     ValueError: The truth value of an array with more than one element is ambiguous. 
     Use a.any() or a.all()

Tags: in目标列表for标准if数组zip
1条回答
网友
1楼 · 发布于 2024-04-25 13:52:27

编辑修改后的问题:

下面是一段代码,它在做你想做的事情。不过,时间复杂性可能会得到改善。在

from numpy import array

fullarray = [(array([0, 1, 1]), array([3, 4, 5]), array([33, 34, 35]), array([20, 16, 20]))]

newlist = []
for arrays in fullarray:
    for idx, value in enumerate(arrays[3]):
        if value == 20:
            newlist.append([array[idx] for array in arrays])

print newlist

旧答案:假设所有数组的大小相同,则可以执行以下操作: full[idx]包含一个元组,其中包含索引idx处所有数组的值,其顺序与压缩顺序相同。在

^{pr2}$

但是if len(ar1) > len(ar2)它将抛出和异常,因此请记住这一点并相应地调整代码。在

相关问题 更多 >