【问题标题】:Assign value to multiple slices in numpy在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 我不能代表问题作者发言,但一个例子是当一个人试图从这样一个多片中形成一个列表理解时(这就是我想要做的,也是我到达的原因这个问题)

标签: python arrays matlab numpy slice


【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2023-04-05
      • 2021-09-13
      • 1970-01-01
      • 2011-05-02
      • 2021-01-15
      • 2020-08-10
      • 2019-03-13
      • 2010-12-13
      相关资源
      最近更新 更多