首页 > 解决方案 > 从 2D 列表中选择列具有所需值的所有行

问题描述

我有一个 MxN 元素的 2D 列表。我想要所有那些列 j 具有特定值的行。我的想法是:

my_2D_list = np.transpose(np.array(my_2D_list))
temp = my_2D_list[my_2D_list[j] == myvalue]

但 temp 是空的。如果我打印 my_2D_list 我可以看到数组被转置,但它就像:

 [['0' '0' '0' ... '0' '0' '0']
  ['0' '0' '1' ... '75' '80' '80'] 
  ['60' '60' '0' ... '10' '108' '108']  ...

没有列之间的逗号,所以我猜它不是在新矩阵的列中拆分每一行,而是一种连续体......我该如何解决这个问题?

标签: python-3.xlistnumpymultidimensional-arraytranspose

解决方案


要从矩阵中的列中选择值,您必须这样做:

list[row_idx, col_idx]

其中索引的第一个参数是行索引,第二个参数是列索引。您可以在此处查看文档。

在你的情况下,这看起来像这样my_2D_list[:, j]:这是一个完整的示例供您检查:

j = 2
n = 1

np.random.seed(42)
my_2D_list = np.random.randint(0, 3, 100).reshape((10, 10))

print(">>> Whole matrix\n%s" % my_2D_list)
print("\n>>> Column %d\n%s" % (j, my_2D_list[:,j]))
print("\n>>> Rows where column %d == %d \n%s" % (j, n, my_2D_list[my_2D_list[:,j] == n]))

输出:

>>> Whole matrix
[[2 0 2 2 0 0 2 1 2 2]
 [2 2 0 2 1 0 1 1 1 1]
 [0 0 1 1 0 0 0 2 2 2]
 [1 2 1 1 2 1 2 2 0 2]
 [0 2 2 0 0 2 1 0 1 1]
 [1 0 1 0 1 2 2 0 2 2]
 [1 0 1 1 1 1 1 1 1 0]
 [2 1 1 1 1 1 1 2 2 1]
 [2 0 1 0 0 1 2 0 1 0]
 [0 0 0 2 0 0 0 2 0 0]]

>>> Column 2
[2 0 1 1 2 1 1 1 1 0]

>>> Rows where column 2 == 1 
[[0 0 1 1 0 0 0 2 2 2]
 [1 2 1 1 2 1 2 2 0 2]
 [1 0 1 0 1 2 2 0 2 2]
 [1 0 1 1 1 1 1 1 1 0]
 [2 1 1 1 1 1 1 2 2 1]
 [2 0 1 0 0 1 2 0 1 0]]

推荐阅读