数据类型intp的用途是什么?

时间:2020-08-26 06:29:09

标签: python numpy cpython

下表中提到了数据类型intp:

此外,索引的含义是什么?

1 个答案:

答案 0 :(得分:0)

整数数组索引

整数数组索引允许根据数组的N维索引选择数组中的任意项。每个整数数组代表该维度的多个索引。 纯整数数组索引

当索引包含与要索引的数组一样多的整数数组时,索引是直接进行的,但与切片不同。

高级索引始终会广播并迭代为一个:

result[i_1, ..., i_M] == x[ind_1[i_1, ..., i_M], ind_2[i_1, ..., i_M],
                           ..., ind_N[i_1, ..., i_M]]

请注意,结果形状与(广播)索引数组形状ind_1,...,ind_N相同。

示例

应从每一行中选择一个特定元素。行索引仅为[0,1,2],列索引指定要为相应行选择的元素,此处为[0,1,0]。两者结合使用可以使用高级索引解决任务:

x = np.array([[1, 2], [3, 4], [5, 6]])

x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])

要实现与上述基本切片类似的行为,可以使用广播。功能ix_可以帮助进行广播。最好用一个例子来理解。

示例

应从4x3数组中使用高级索引选择拐角元素。因此,需要选择列为[0,2]之一而行为[0,3]之一的所有元素。要使用高级索引,需要明确选择所有元素。使用前面解释的方法,可以编写:

x = np.array([[ 0,  1,  2],

              [ 3,  4,  5],

              [ 6,  7,  8],

              [ 9, 10, 11]])

rows = np.array([[0, 0],

                 [3, 3]], dtype=np.intp)

columns = np.array([[0, 2],

                    [0, 2]], dtype=np.intp)

x[rows, columns]
array([[ 0,  2],
       [ 9, 11]])

但是,由于上面的索引数组只会重复自身,因此可以使用广播(比较rows [:, np.newaxis] +列之类的操作)来简化此操作:

rows = np.array([0, 3], dtype=np.intp)

columns = np.array([0, 2], dtype=np.intp)

rows[:, np.newaxis]
array([[0],
       [3]])

x[rows[:, np.newaxis], columns]
array([[ 0,  2],
       [ 9, 11]])

此广播也可以使用功能ix _:

x[np.ix_(rows, columns)]
array([[ 0,  2],
       [ 9, 11]])

请注意,如上例所示,没有np.ix_调用,将仅选择对角线元素。对于使用多个高级索引建立索引,这一区别是最重要的。

请阅读。

REF:https://numpy.org/doc/stable/reference/arrays.indexing.html