在numpy中为多个切片赋值
Posted
技术标签:
【中文标题】在numpy中为多个切片赋值【英文标题】:Assign value to multiple slices in numpy 【发布时间】:2013-04-23 08:56:47 【问题描述】:在Matlab中,你可以给同一个列表的多个切片赋值:
>> a = 1:10
a =
1 2 3 4 5 6 7 8 9 10
>> a([1:3,7:9]) = 10
a =
10 10 10 4 5 6 10 10 10 10
如何在 Python 中使用 numpy 数组做到这一点?
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[1:3,7:9] = 10
IndexError: too many indices
【问题讨论】:
您有什么理由希望在一个语句中而不是在两个语句中执行它? @SukritKalra 我不能代表问题作者发言,但一个例子是当一个人试图从这样一个多片中形成一个列表理解时(这就是我想要做的,也是我到达的原因这个问题) 【参考方案1】:您也可以考虑使用np.r_
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html
ii = np.r_[0:3,7:10]
a[ii] = 10
In [11]: a
Out[11]: array([ 10, 10, 10, 3, 4, 5, 6, 10, 10, 10])
【讨论】:
【参考方案2】:a = np.arange(10)
a[[range(3)+range(6,9)]] = 10
#or a[[0,1,2,6,7,8]] = 10
print a
我认为这应该可行......我不知道这正是你想要的
【讨论】:
没有 NumPy 可以实现吗? 确实如此。 NumPy 是真正的单线之王。【参考方案3】:来自http://docs.scipy.org/doc/numpy/user/basics.indexing.html(“索引数组”部分)。请注意,所需切片的索引应包含在“np.array()”中。
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[np.array([3, 3, 1, 8])]
array([7, 7, 9, 2])
【讨论】:
以上是关于在numpy中为多个切片赋值的主要内容,如果未能解决你的问题,请参考以下文章