Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过一个步长获得Numpy切片的索引?_Python_Numpy - Fatal编程技术网

Python 如何通过一个步长获得Numpy切片的索引?

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

原始问题和愚蠢的例子:例如,我的问题很简单,如何用步长得到切片的索引位置,单位为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,  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),)