谁能解释一下 numpy.indices() 吗?

Posted

技术标签:

【中文标题】谁能解释一下 numpy.indices() 吗?【英文标题】:Can anybody explain me the numpy.indices()? 【发布时间】:2015-11-23 03:09:56 【问题描述】:

我已多次阅读有关 np.indices() 的文档,但我似乎无法理解它的含义。 我已经在事物上多次使用它来查看它的作用,但我仍然无法真正理解它。也许问题是我是编程的初学者,所以我无法理解描述它的词语背后的想法。此外,我不是以英语为母语的人(尽管我对此没有任何问题)。 我将非常感谢一种更简单的解释,可能是一些例子。谢谢。

【问题讨论】:

别说你是初学者,我学numpy很多年了,也对这个indices()函数感到困惑。感谢您提出这个问题。 【参考方案1】:

假设您有一个矩阵 M,其 (i,j)-th 元素等于

M_ij = 2*i + 3*j

定义这个矩阵的一种方法是

i, j = np.indices((2,3))
M = 2*i + 3*j

产生

array([[0, 3, 6],
       [2, 5, 8]])

换句话说,np.indices 返回可用作索引的数组i中的元素表示行索引:

In [12]: i
Out[12]: 
array([[0, 0, 0],
       [1, 1, 1]])

j中的元素表示列索引:

In [13]: j
Out[13]: 
array([[0, 1, 2],
       [0, 1, 2]])

【讨论】:

文档经过精心编写,有效掩盖了这一事实。【参考方案2】:

我已经理解了这段代码。

以下函数的行为与 np.indices() 相同。

# fixed dimensions=(2,3,4)
def my_indices():
    dimensions = (2,3,4)
    A = np.empty(dimensions)
    # dimensions[0] = 2
    A[0, :, :] = 0
    A[1, :, :] = 1

    B = np.empty(dimensions)
    # dimensions[1] = 3
    B[:, 0, :] = 0
    B[:, 1, :] = 1
    B[:, 2, :] = 2

    C = np.empty(dimensions)
    # dimensions[2] = 4
    C[:, :, 0] = 0
    C[:, :, 1] = 1
    C[:, :, 2] = 2
    C[:, :, 3] = 3

    return [A, B, C] 

致电

A, B, C = my_indices()
print(A.shape)
print(B.shape)
print(C.shape)
print('A\n', A)
print('B\n', B)
print('C\n', C)

结果

(2, 3, 4)
(2, 3, 4)
(2, 3, 4)
A
 [[[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]

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

B
 [[[0. 0. 0. 0.]
  [1. 1. 1. 1.]
  [2. 2. 2. 2.]]

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

C
 [[[0. 1. 2. 3.]
  [0. 1. 2. 3.]
  [0. 1. 2. 3.]]

 [[0. 1. 2. 3.]
  [0. 1. 2. 3.]
  [0. 1. 2. 3.]]]

np.indices() 用例

def create_hsv_map():
    img_hsv = np.empty((180, 256, 3), np.uint8)
    hue, saturation = np.indices((180,256))
    img_hsv[:, :, 0] = hue
    img_hsv[:, :, 1] = saturation
    img_hsv[:, :, 2] = 255
    # ...

使用 np.repeat() 代替 np.indices() 的示例

def create_hsv_map2():
    img_hsv = np.empty((180, 256, 3), np.uint8)
    hue = np.repeat(np.arange(180).reshape(180, 1), repeats=256, axis=1)
    saturation = np.repeat(np.arange(256).reshape(1, 256), repeats=180, axis=0)
    img_hsv[:, :, 0] = hue
    img_hsv[:, :, 1] = saturation
    img_hsv[:, :, 2] = 255
    # ...

【讨论】:

【参考方案3】:

已经发布的答案仍然很复杂,所以这里是理解这一点的最简单方法。


第 1 步:让我们创建一个 2x2 网格

ids = np.indices((2,2))

第 2 步:现在让我们解压缩 i,j 索引

i, j = ids 

这些是索引i,j

print(i)
[[0 0]
 [1 1]]

print(j)
[[0 1]
 [0 1]]

第 3 步:了解 i,j 代表什么

想到它的简单方法是将配对作为(i0,j0), (i1,j1), (i2,j2), (i3,j3) 即将i 的每个元素与j 的对应元素匹配。

所以我们得到:(0,0), (0,1), (1,0), (1,1)

这些正是 2x2 网格的索引:

【讨论】:

以上是关于谁能解释一下 numpy.indices() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

什么是BI,谁能解释一下?

谁能解释一下这个 NSPredicate 语法

谁能解释一下StandardScaler?

谁能给我解释一下BIM轻量化是啥?而且我现在看到好多公司都在做BIM轻量化,有谁给我解释一下吗?

MessageQ是啥,RabbitMQ又是啥?两者有啥联系吗?谁能通俗易懂的的解释一下

谁能解释一下Applets和AWT?