原始问题(有愚蠢的例子):例如我的问题很简单,你如何在Numpy中获得带有step的切片的索引位置。请参阅下面的示例,您可以在切片上使用np.nonzero但包含一个步骤而不是。还有其他选择
import numpy as np
d = np.hstack([np.arange(6), np.arange(6), np.arange(6)])
step = 6
np.nonzero(d[0:-1])
Out[45]: (array([ 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16]),)
In [46]: np.nonzero(d[0:-1:step])
Out[46]: (array([], dtype=int64),)
`
我应该问过这个问题。
如何通过Numpy中的步骤获得切片的索引。 例如
import numpy as np
d = np.hstack([np.arange(6), np.arange(6), np.arange(6)])
step = 6
#The indices of d[0:-1:step] would be:
array([ 0, 6, 12])
答案 0 :(得分:4)
np.nonzero
使用步骤arg,它只是你的步骤arg匹配没有非零值的索引:
In[59]:
d[0:-1:step]
Out[59]: array([0, 0, 0])
例如,如果您的步骤arg是5
,那么它按预期工作:
In[60]:
d[0:-1:5]
Out[60]: array([0, 5, 4, 3])
In[61]:
np.nonzero(d[0:-1:5])
Out[61]: (array([1, 2, 3], dtype=int64),)
<强>更新强>
如果您只想要切片中的索引,那么您只需将切片应用于范围:
In[72]:
np.arange(len(d))[0:-1:step]
Out[72]: array([ 0, 6, 12])
或者只做arange
并传递长度和步骤参数:
In[73]:
np.arange(0, len(d), step)
Out[73]: array([ 0, 6, 12])
更新2
感谢@Divakar(numpy master),您可以使用r_
将切片表示法转换为数组,这样可以减少输入:
In[79]:
np.r_[:len(d):step]
Out[79]: array([ 0, 6, 12])
答案 1 :(得分:0)
如果您step=6
numpy array d
的行为与
step = 6
print((d[0:-1:step]))
output:[0 0 0]
因为
d = np.hstack([np.arange(6), np.arange(6), np.arange(6)])
print(d)
output: [0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5]
所以step=6
np.nonzero(d[0:-1:step])
output: (array([], dtype=int64),)