Dug*_*gas 6 python arrays indexing numpy
我觉得很傻,因为这是一件很简单的事情,但我在这里或其他任何地方都找不到答案.
有没有直接的方法索引numpy数组与另一个?
说我有一个2D数组
>> A = np.asarray([[1, 2], [3, 4], [5, 6], [7, 8]])
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
Run Code Online (Sandbox Code Playgroud)
如果我想访问元素[3,1]我输入
>> A[3,1]
8
Run Code Online (Sandbox Code Playgroud)
现在,假设我将此索引存储在数组中
>> ind = np.array([3,1])
Run Code Online (Sandbox Code Playgroud)
并尝试使用索引这次:
>> A[ind]
array([[7, 8],
[3, 4]])
Run Code Online (Sandbox Code Playgroud)
结果不是A [3,1]
问题是:拥有数组A和ind,获得A [3,1]的最简单方法是什么?
那是因为通过提供一个数组,您实际上是在问
A[[3,1]]
Run Code Online (Sandbox Code Playgroud)
它给出了二维数组的第三个和第一个索引,而不是你想要的数组第三个索引的第一个索引。
您可以使用
A[ind[0],ind[1]]
Run Code Online (Sandbox Code Playgroud)
您也可以使用(如果您想要同时使用更多索引);
A[indx,indy]
Run Code Online (Sandbox Code Playgroud)
其中indx和indy分别是第一维和第二维的 numpy 索引数组。
有关 numpy 数组的所有可能的索引方法,请参见此处:http : //docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html
只需使用一个元组:
>>> A[(3, 1)]
8
>>> A[tuple(ind)]
8
Run Code Online (Sandbox Code Playgroud)
在A[]实际调用特殊方法__getitem__:
>>> A.__getitem__((3, 1))
8
Run Code Online (Sandbox Code Playgroud)
并使用逗号创建一个元组:
>>> 3, 1
(3, 1)
Run Code Online (Sandbox Code Playgroud)
将这两个基本的 Python 原则放在一起可以解决您的问题。
如果您不需要 NumPy 数组功能,您可以首先将索引存储在元组中。
| 归档时间: |
|
| 查看次数: |
4737 次 |
| 最近记录: |