Python 如何通过一个步长获得Numpy切片的索引?
原始问题和愚蠢的例子:例如,我的问题很简单,如何用步长得到切片的索引位置,单位为Numpy。请参见下面的示例,在该示例中,您可以在切片上使用np.nonzero,但包含一个步骤,而不包含步骤。还有别的选择吗Python 如何通过一个步长获得Numpy切片的索引?,python,numpy,Python,Numpy,原始问题和愚蠢的例子:例如,我的问题很简单,如何用步长得到切片的索引位置,单位为Numpy。请参见下面的示例,在该示例中,您可以在切片上使用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
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中的步长获得切片的索引。
e、 g
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])
或者只需进行排列并传递长度和步长参数:
In[73]:
np.arange(0, len(d), step)
Out[73]: array([ 0, 6, 12])
更新2
多亏了@Divakar这个numpy主控程序,您可以使用它将切片表示法转换为数组,而且这样的输入更少:
In[79]:
np.r_[:len(d):step]
Out[79]: array([ 0, 6, 12])
如果您的步长=6,则numpy数组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]
所以步骤=6
但这不是因为你的步长等于0所在的位置吗?因为d[0:-1:step]返回[58]:数组[0,0,0],所以这是正确的这与我的回答相同解释是不同的这可以帮助OPIf你想去喜欢/保持接近切片符号:np.r\u[:lend:step]。@Divakar肯定这是一个更干净的方法,会更新,谢谢这太神奇了。
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]
np.nonzero(d[0:-1:step])
output: (array([], dtype=int64),)