选择具有特定值的列
Posted
技术标签:
【中文标题】选择具有特定值的列【英文标题】: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()
函数。
【参考方案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 的文档或在 *** 中的此处):
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] )
【讨论】:
以上是关于选择具有特定值的列的主要内容,如果未能解决你的问题,请参考以下文章