Jul*_*ien 2 python indexing numpy
首先让我们把它放在一边:我已经知道这里讨论的解决方案:通过指定行和列从另一个数组创建 NumPy 数组
假设我有一个数组
test = np.arange(12).reshape((3,4))
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
Run Code Online (Sandbox Code Playgroud)
我想将其行和列重新排列成test2
array([[ 1, 0, 3, 2],
[ 9, 8, 11, 10],
[ 5, 4, 7, 6]])
Run Code Online (Sandbox Code Playgroud)
我现在使用的解决方案与上面链接中已经回答的解决方案相同:
test2 = test[[0,2,1]][:,[1,0,3,2]]
Run Code Online (Sandbox Code Playgroud)
然而,此解决方案创建了不必要的数据中间副本:它首先创建仅包含打乱行的副本test[[0,2,1]],然后创建第二个包含打乱列的副本。对于如此小的阵列,没有人关心,但如果阵列巨大,则该解决方案感觉不是最佳的。numpy 是否允许行和列同时洗牌?看起来像的东西test[[0,2,1],[1,0,3,2]],除了 numpy 不会那样解释这个操作......
是的,这就是目的np.ix_:
>>> test[np.ix_([0,2,1], [1,0,3,2])]
array([[ 1, 0, 3, 2],
[ 9, 8, 11, 10],
[ 5, 4, 7, 6]])
Run Code Online (Sandbox Code Playgroud)
它仍然会从两个输入数组创建一个中间索引数组,但不会对该test数组进行两次索引。
请注意,np.ix_只是向索引数组添加维度,当您索引数组时,这些维度将被“广播”:
>>> np.ix_([0,2,1], [1,0,3,2])
(array([[0],
[2],
[1]]), array([[1, 0, 3, 2]]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5408 次 |
| 最近记录: |