Python / Numpy子阵列选择

时间:2015-01-14 06:43:55

标签: python arrays numpy

我有一些Numpy代码,我试图破译。有一行v1 = v1[:, a1.tolist()]传递一个numpy数组a1并将其转换为一个列表。我对v1[:, a1.tolist()]实际做了什么感到困惑。我知道v1现在被设置为由v1选择的[:, a1.tolist()]给出的列数组但是被选中的是什么?更准确地说,[:, a.tolist()]在做什么?

2 个答案:

答案 0 :(得分:11)

如果将它拆分为两部分,则会更容易理解您所使用的语法:

1。使用列表作为索引

numpy意思是

a[[1,2,3]]

[a[1], a[2], a[3]]

换句话说,使用列表作为索引就像创建使用元素列表作为索引一样。

2。选择[:,x]

的含义
a2[:, x]

[a2[0][x],
 a2[1][x],
 a2[2][x],
 ...
 a2[n-1][x]]

即。从矩阵中选择一列。

总结

的含义
a[:, [1, 3, 5]]

因此

[[a[ 0 ][1], a[ 0 ][3], a[ 0 ][5]],
 [a[ 1 ][1], a[ 1 ][3], a[ 1 ][5]],
               ...
 [a[n-1][1], a[n-1][3], a[n-1][5]]]

换句话说,a的副本包含选择的列(或重复和重新排序;索引列表中的元素不需要区分或排序)。

答案 1 :(得分:1)

假设像2D阵列这样的简单示例,v1[:, a1.tolist()]会选择v1的所有行,但只会选择由a1值描述的列

简单示例:

>>> x
array([['a', 'b', 'c'],
       ['d', 'f', 'g']],
      dtype='|S1')

>>> x[:,[0]]
array([['a'],
       ['d']],
      dtype='|S1')
>>> x[:,[0, 1]]
array([['a', 'b'],
       ['d', 'f']],
      dtype='|S1')