python – 使用范围的多维数组,同时具有设置的开始,停止和步骤?

Oy伙伴,

我自己学习numpy并且得到了很好的处理,即使阅读了documentation之后,我也听不到一些概念.我试图通过这个矩阵,让每一行都有10个一直通过它.

data = np.ones(50).reshape(5,10)
xmax = data.shape[0]
ymax = data.shape[1]
data[range(xmax)::2,range(ymax)] = 10

最后一行代码不正确.我知道如何使用半冒号切片 – 列表[start:stop:step]我知道如何使用花式索引通过使用逗号ndarray [range(end1),range(end2)]来完成矩阵但是我该怎么做结合这两种方法?

如何使用范围逐步执行多维数组,同时设置启动,停止和步骤?

最佳答案 我想你想要的是这个:

>>> data[range(xmax)[::2],:] = 10
>>> data
array([[ 10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.],
       [  1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.],
       [ 10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.],
       [  1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.],
       [ 10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.,  10.]])'

问题在于:

 >>> range(xmax)::
       File "<stdin>", line 1
        range(xmax)::
                   ^
    SyntaxError: invalid syntax

您需要明确地将切片语法应用于范围:

 >>> range(xmax)[::2]
 [0, 2, 4]

一般参考,您可以这样做:

data[np.arange(start1, end1, step1), np.arange(start2, end2, step2)]

第一个np.arange选择行,第二个np.aranage选择列.

一些可能有用的参考资料:

> Numpy Array
Indexing

> Tentative Numpy Tutorial: Slicing
> Scipy Lecture Notes : Slicing
> A SO answer by @unutubu

点赞