Fra*_*ter 5 python indexing numpy scipy
我有类似的东西
m = array([[1, 2],
[4, 5],
[7, 8],
[6, 2]])
Run Code Online (Sandbox Code Playgroud)
和
select = array([0,1,0,0])
Run Code Online (Sandbox Code Playgroud)
我的目标是
result = array([1, 5, 7, 6])
Run Code Online (Sandbox Code Playgroud)
当我读到Simplfy行和列提取时,我尝试了_ix ,numpy,但这并没有导致我想要的结果.
ps如果您能想到更精确的问题,请更改此问题的标题.
seb*_*erg 12
执行此操作的numpy方法是使用np.choose或花式索引/获取(见下文):
m = array([[1, 2],
[4, 5],
[7, 8],
[6, 2]])
select = array([0,1,0,0])
result = np.choose(select, m.T)
Run Code Online (Sandbox Code Playgroud)
所以没有必要使用python循环或任何东西,numpy给你的所有速度优势.m.T只是需要因为选择实际上是两个数组之间的选择np.choose(select, (m[:,0], m[:1])),但它直接使用它就像这样.
使用花式索引:
result = m[np.arange(len(select)), select]
Run Code Online (Sandbox Code Playgroud)
如果速度非常重要np.take,它可以在一维视图上工作(由于某些原因,速度相当快,但可能不适用于这些微小的数组):
result = m.take(select+np.arange(0, len(select) * m.shape[1], m.shape[1]))
Run Code Online (Sandbox Code Playgroud)
使用Python怎么样?
result = array([subarray[index] for subarray, index in zip(m, select)])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4506 次 |
| 最近记录: |