Python/Numpy子数组选择

7
我有一些Numpy代码需要解释。有一行代码v1 = v1[:, a1.tolist()],它传递了一个numpy数组a1并将其转换为列表。我不知道v1[:, a1.tolist()]具体是做什么的。我知道v1现在被设置为由选择[:, a1.tolist()]给出的列数组,但是正在选择什么呢?更准确地说,[:, a.tolist()]是在做什么?
2个回答

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的一个副本,并选择列(或重复和重新排序;索引列表中的元素不需要是不同的或排序的)。


感谢您的解释。 - Black

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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接