简洁的方法让NumPy在逻辑索引后返回正确形状的数组,而不进行整形?

2024-05-29 02:02:00 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有阵列:

 >>> import numpy as np
 >>> myarr = np.array([[1],[2],[3],[2]])

我想使用逻辑索引来返回子数组,其中myarr不等于2。在

^{pr2}$

因此,myarr.shape = (4,1)但是subarr.shape = (2,)。在

为什么在逻辑索引不影响维度2的情况下更改维度2的大小?我可以很容易地改变输出,但是如果我需要在代码中经常使用逻辑索引,我不想总是考虑到可能已经改变的额外维度(即,显然与我所做的逻辑切片无关的维度)。在

这个(N,1)-->;(K,)示例特别麻烦,因为somethine by one数组的任何逻辑切片也必须是somethine by one数组。在

我觉得必须有一种更干净的方法来让NumPy切片操作不涉及琐碎的数组维度。有什么建议吗?在


Tags: importnumpybyasnp切片数组逻辑
1条回答
网友
1楼 · 发布于 2024-05-29 02:02:00

在numpy中,使用布尔数组进行索引与使用数组非零(). 因为数组非零()返回2darray的两组索引,实际上是在第一个维度和第二个维度上建立索引:

>>> myarr = np.array([[1],[2],[3],[2]])
>>> (myarr != 2).nonzero()
(array([0, 2]), array([0, 0]))
>>> myarr[(array([0, 2]), array([0, 0]))]
array([1, 3])

你真正想要的是:

^{pr2}$

你可以通过:

>>> myarr[myarr[:,0] != 2]
array([[1],
       [3]])

或者:

>>> myarr[(myarr != 2).nonzero()[0]]
array([[1],
       [3]])

相关问题 更多 >

    热门问题