numpy中的np.ix_的用法

其实就是相当于花式索引,会增加可读性,给出下面的例子

import  numpy as np
a=np.arange(10).reshape(2,5)
a[np.ix_([0,1],[2,3])]=2
print(a)

结果如下:
array([[0, 1, 2, 2, 4],
[5, 6, 2, 2, 9]])
需要注意的是:
A[[2,3]][:,[0,1]]
#这种方式只有 read-only access(即只读权限),无法对指定的位置赋值

a=np.arange(10).reshape(2,5)
a[[0,1,]][:,[2,3]]
a[[0,1,]][:,[2,3]]=6
a

结果如下:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
实际意思就是,直接往np.ix_()里扔进两个一维数组[1,5,7,2],[0,3,1,2],就能先按我们要求选取行,再按顺序将列排序,跟上面得到的结果一样,而不用写**“[ : , [0,3,1,2] ]**
原理:np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系
再给出以下的例子:

arr = np.arange(32).reshape((8,4))
arr[np.ix_([1,5,7,2],[0,3,1,2])]

结果如下:
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
例如就这个例子,np.ix_函数,将数组[1,5,7,2]和数组[0,3,1,2]产生笛卡尔积,就是得到(1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);就是按照坐标(1,0),(1,3),(1,1),(1,2)取得 arr2 所对应的元素4,7,5,6,(5,0),(5,3),(5,1),(5,2)取得 arr2 所对应的元素20,23,21,22这样也就少了关于***“[ : , [0,3,1,2] ]****

猜你喜欢

转载自blog.csdn.net/weixin_43213268/article/details/88929351
今日推荐