在numpy中,是否有一个函数可以找到ix_3;的倒数?

在numpy中,是否有一个函数可以找到ix_3;的倒数?,numpy,Numpy,使用numpy,我的目标是从二次矩阵中选择一个二次子矩阵,然后查看不在第一个子矩阵中的元素集合 对于第一个子矩阵,我使用的是np.ix\ux: 将numpy导入为np r=np.random.rand(3,3) l=[1,2] r[np.ix(l,l)] 然后,r[np.ix(l,l)]将选择一个2x2矩阵,用**标记: 0 1. 2. 0 r0,0 r0,1 r0,2 1. r1,0 **r1,1** **r1,2** 2. r2,0 **r2,1** **r2,2** 使用np.ix相当于

使用
numpy
,我的目标是从二次矩阵中选择一个二次子矩阵,然后查看不在第一个子矩阵中的元素集合

对于第一个子矩阵,我使用的是
np.ix\ux

将numpy导入为np
r=np.random.rand(3,3)
l=[1,2]
r[np.ix(l,l)]
然后,
r[np.ix(l,l)]
将选择一个2x2矩阵,用
**
标记:

0 1. 2. 0 r0,0 r0,1 r0,2 1. r1,0 **r1,1** **r1,2** 2. r2,0 **r2,1** **r2,2**
使用
np.ix
相当于使用基本索引,但触发高级索引

因此,它允许您将属于第一行和第二行以及第一列和第二列的所有元素作为副本完整地获取(基本索引生成一个视图)

相当于
np.ix
,使用基本索引(这是一个视图,不是副本!)-

但是,如果您希望获取(1,1)和(2,2)索引元素,则可以直接使用高级索引,如下所示-

r[l,l]
如您所见,这将返回您正在查找的对角线元素(例如使用
np.eye


阅读更多有关索引(基本和高级)工作原理的信息,或者查看详细答案,我也会在其中进行解释。

根据@hpaulj的评论,我采用了
numpy.ma
子模块的方法:

将numpy导入为np
r=np.random.rand(3,3)
l=[1,2]
r[np.ix(l,l)]
将numpy.ma导入为ma
遮罩=毫安零点(r形)
遮罩[np.ix_Ul(l,l)]=1
然后,
ma.compressed()
给出所需的结果:


ma.compressed(ma.array(r,mask=mask))

r[l,l]
将满足您的需求。正如我在下面阐述的,“剩余”元素不会形成数组。在ypur示例中,它是一个L形,在另一个示例中,它可以是一个带孔的数组。您可以制作一个布尔掩码,该掩码在孔中为真,在别处为假(或其逆),并使用该掩码选择非_in_ix值,或制作一个掩码数组。感谢您提供有关索引的其他信息,但我担心我的问题有点不清楚。我不是在寻找条目r1,1和r2,2元素,而是在寻找r0,0,r0,1,r0,2,r1,0,r2,0。也就是说,
np.ix
没有选择的所有值。为什么不使用
r[:3,:3]
?那对你有用吗?只是想了解一下,哪一个是父矩阵,哪一个是子矩阵?在索引中使用切片,例如
0:3
1:3
将允许您从原始父矩阵中获取视图,您可以对此视图进行更新,这也将更新父矩阵中的值。但是,如果使用
np.ix
,最终将创建一个副本。对副本执行操作将无法将值分配回父级。
array([[0.46899841, 0.49051596],
       [0.00256912, 0.86447371]])
r[1:3, 1:3]
array([[0.46899841, 0.49051596],
       [0.00256912, 0.86447371]])
r[l,l]
array([0.46899841, 0.86447371])