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

问题描述

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

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

解决方法

整数数组索引

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

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

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

result[i_1,...,i_M] == x[ind_1[i_1,i_M],ind_2[i_1,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,[0,0]]
array([1,4,5])

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

示例

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

x = np.array([[ 0,[ 3,5],[ 6,7,8],[ 9,10,11]])

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

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

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

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

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

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

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

x[rows[:,np.newaxis],11]])

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

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

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

请阅读。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...