【问题标题】:Choosing a column which has a certain value选择具有特定值的列
【发布时间】:2022-01-17 08:15:48
【问题描述】:

我有一个如下的 numpy 数组

all = [[0 0 0],[0 0 1],[0 0 2], ... , [0 0 12]]

我试图只显示具有第三个值 12 的数组。在本例中为 [0 0 12]。当我执行我的代码时,我得到以下输出

[[0 0 0],[0 0 0],[0 0 12]] 

我不知道为什么我得到那些 0 数组。我的代码如下。

for i in all:
  if i[2]==12:
    print(all[i]) ```

【问题讨论】:

  • 不要将变量命名为 all,因为它会影响内置的 all() 函数。

标签: python python-3.x numpy


【解决方案1】:

您可以选择与您的条件相对应的所有数组值。

import numpy as np

arr = np.array([[0, 0, 0],
                [0, 0, 1],
                [0, 0, 2],
                [0, 0, 10],
                [0, 0, 11],
                [0, 0, 12]])

print(arr[arr[:,2]==12])

输出

[[ 0  0 12]]

【讨论】:

    【解决方案2】:

    你可以使用布尔掩码:

    当你打印你的数组时,你会得到:

    print(arr)
    array([[ 0,  0,  0],
           [ 0,  0,  1],
           [ 0,  0,  2],
           [ 0,  0, 12]])
    

    第三行是:

    array([[ 0],
           [ 1],
           [ 2],
           [12]])
    

    现在,您可以创建一个布尔掩码:

    arr[:,2]==12
    

    计算结果为

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

    这意味着第 1-3 行没有 12 作为第三个元素,但第 4 行有。

    所以你在arr上使用这个掩码:

    arr[arr[:,2]==12]
    

    输出:

    array([[ 0,  0, 12]])
    

    【讨论】:

      【解决方案3】:

      试试这个(我确信有一种最有效的方法而不是 for 循环,请查看 numpy 的文档或在 stackoverflow 中的此处):

      import numpy as np
      # turn list of lists into a numpy array
      all = np.array([[0,0,0],[0,0,0],[0,0,12]])
      
      # use enumerate if you want so you can have the index
      for i,ar in enumerate(all.tolist()):
        # look for your value
        if ar[2]==12:
            # as you want the rows just do all[i]
            # if you want the column also all[i][3]
            print( all[i] )
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2021-07-29
        • 2013-06-22
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多