当前位置: 首页 > 面试题库 >

在numpy中索引多个非相邻范围

元景天
2023-03-14
问题内容

我想从一维numpy数组(或向量)中选择多个不相邻的范围。

假设:

>>> idx = np.random.randint(100, size=10)
array([82,  9, 11, 94, 31, 87, 43, 77, 49, 50])

当然,这可行:

>>> idx[0:3]
array([82,  9, 11])

这可以通过单个索引获取:

>>> idx[[0,3,4]]
array([82, 94, 31])

但是,如果我要选择范围0:3,该7:怎么办?

我试过了:

>>> idx[[0:3,7:]]
SyntaxError: invalid syntax

有没有简单的方法可以执行此操作,或者我需要分别生成它们并进行连接?


问题答案:

您需要在索引之前或之后进行串联。 np.r_使它变得容易

In [116]: idx=np.array([82,  9, 11, 94, 31, 87, 43, 77, 49, 50])
In [117]: np.r_[0:3,7:10]
Out[117]: array([0, 1, 2, 7, 8, 9])
In [118]: idx[np.r_[0:3,7:10]]
Out[118]: array([82,  9, 11, 77, 49, 50])

np.r_ 扩展切片并将其连接。

您可以混合切片和列表:

In [120]: np.r_[0:3,7:10,[0,3,4]]
Out[120]: array([0, 1, 2, 7, 8, 9, 0, 3, 4])

在索引之前进行连接可能比在之后进行连接要快,但是对于这样的一维数组,我认为差异并不明显。



 类似资料:
  • 假设我有一个10x10单元格的板。每个单元格的索引从1到100(基于1的索引)。该板是一个单元格列表:。 任务。给定一个单元格的索引,找出覆盖它的所有单元格。 例如: 给定索引: 返回:,顺序不受关注。 我的解决方案是: 如果给定的单元格位于黑板中心的某个位置,我的方法似乎会返回正确的结果。但是如果给定的单元格在角或边,那就错了。例如,如果给定的单元格=5,那么该方法将包括索引为4的单元格,尽管它

  • 问题内容: 我有一个数组: 我希望在此数组中找到多个值的行的索引: 对于此示例,我想要一个类似的结果: 我有一个执行此操作的代码,但我认为它过于复杂: 我找到了类似问题的答案,但仅适用于一维数组。 有没有一种方法可以更简单地完成我想要的工作? 问题答案: 方法1 一种方法是像这样 方法#2 一种内存有效的方法是将每一行转换为等效的线性索引,然后使用np.in1d,例如, 方法3 使用np.sear

  • 问题内容: 假设我有一个带有任意值的矩阵A: 矩阵B包含A中元素的索引: 我该如何选择值一个指向由乙,即: 问题答案: 你可以使用 一个人也可以使用 样品运行

  • 问题内容: 例如,我有一个数字数组 我想找到特定范围内元素的所有索引。例如,如果范围是(6,10),则答案应该是(3,4,5)。有内置的功能可以做到这一点吗? 问题答案: 您可以用来获取索引并设置两个条件:

  • 问题内容: 午夜过后,也许有人知道如何解决我的问题。我想将相邻单元格的数量(这意味着具有其他值的数组字段的数量,例如数组值附近的零)作为 每个有效值的 总和 ! 。 例: 如果我的值的结构变化,我如何以这种方式计算零的数量?我以某种方式认为必须使用SciPy的binary_dilation函数,该函数能够扩大值结构,但是对重叠的简单计数不能使我得出正确的总和? 问题答案: 使用 卷积 计算邻居数:

  • 问题内容: 简单版本: 如果我这样做: 我得到的输出。但是我想。使用隐式numpy循环而不是自己遍历它,是否可能以某种方式实现? 我实际上需要做什么的版本: 我有一个结构化的数组,其中包含一个索引,一个值和一些布尔值。我想根据布尔值对那些索引处的值求和。显然,这可以通过一个简单的循环来完成,但是似乎可以通过聪明的numpy索引来实现(如上所述)。 例如,我有一个包含5个元素的数组,要从数组中填充值