【问题标题】:Using range while fancy indexing?在花哨的索引时使用范围?
【发布时间】:2014-02-23 01:35:49
【问题描述】:

有人可以简单地向我解释一下这个表达吗?你怎么能取两个值的范围并将它们设置为零?

lena_image[range(xmax), range(ymax)] = 0

【问题讨论】:

标签: python numpy scipy


【解决方案1】:

您的代码会将主对角线设置为零:

import numpy as np

n = 5
lena_image = np.ones(shape=(n, n))
lena_image[range(n), range(n)] = 0
print lena_image

输出:

[[ 0.  1.  1.  1.  1.]
 [ 1.  0.  1.  1.  1.]
 [ 1.  1.  0.  1.  1.]
 [ 1.  1.  1.  0.  1.]
 [ 1.  1.  1.  1.  0.]]

【讨论】:

    【解决方案2】:

    range(n) 生成一个列表,范围从 0 包含到 n 不包含:

    In [847]: range(3)
    Out[847]: [0, 1, 2]
    

    numpy 花式索引获取索引 Xs 和 Ys 处的元素,并为它们分配一个新值:

    In [856]: d
    Out[856]: 
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    
    In [857]: d[range(5), range(5)]=2 #assigns elems on diagonal d[0,0], d[1,1], d[2,2], etc.
         ...: print d
    [[ 2.  0.  0.  0.  0.]
     [ 0.  2.  0.  0.  0.]
     [ 0.  0.  2.  0.  0.]
     [ 0.  0.  0.  2.  0.]
     [ 0.  0.  0.  0.  2.]]
    

    注意在这种情况下Xs 和Ys 的数量必须相同

    如果要修改block(这次不是对角线),请使用广播

    In [878]: arange(3)[:, None] #get a 2D array of shape (3, 1)
    Out[878]: 
    array([[0],
           [1],
           [2]])
    
    In [874]: d[arange(3)[:, None], arange(2)] #get the sub array of row 0~2, col 0~1
    Out[874]: 
    array([[ 2.,  0.],
           [ 0.,  2.],
           [ 0.,  0.]])
    
    In [875]: d[arange(3)[:, None], arange(2)]=100 #assign new values element-wise 
    
    In [876]: d
    Out[876]: 
    array([[ 100.,  100.,    0.,    0.,    0.],
           [ 100.,  100.,    0.,    0.,    0.],
           [ 100.,  100.,    2.,    0.,    0.],
           [   0.,    0.,    0.,    2.,    0.],
           [   0.,    0.,    0.,    0.,    2.]])
    

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2021-06-21
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多