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

如何在Numpy中就地扩展数组?

能旭
2023-03-14
问题内容

目前,我有一些这样的代码

import numpy as np
ret = np.array([])
for i in range(100000):
  tmp =  get_input(i)
  ret = np.append(ret, np.zeros(len(tmp)))
  ret = np.append(ret, np.ones(fixed_length))

我认为此代码 效率不高, 因为np.append需要返回数组的副本而不是 就地修改ret

我想知道是否可以将extendnumpy数组用于以下代码:

import numpy as np
from somewhere import np_extend
ret = np.array([])
for i in range(100000):
  tmp =  get_input(i)
  np_extend(ret, np.zeros(len(tmp)))
  np_extend(ret, np.ones(fixed_length))

这样,extend效率会更高。有人对此有想法吗?谢谢!


问题答案:

想象一个numpy数组占据一个连续的内存块。现在想象一下其他对象,例如其他numpy数组,它们正占据着numpy数组左右两侧的内存。没有空间可以追加或扩展我们的numpy数组。numpy数组中的基础数据始终占用
连续 的内存块。

因此,任何追加或扩展numpy数组的请求都只能通过分配一个更大的全新内存块,将旧数据复制到新块中,然后追加或扩展来满足。

所以:

  1. 它不会就地发生。
  2. 效率不高。


 类似资料:
  • 问题内容: 基本问题是:执行以下操作时会发生什么? 给定以下内容: 我明白那个: 与相同,直接分配给所指示的项目 与相同,即会进行加法 但是当我这样做时会发生什么 : 特别: 这和一样吗?(这不是就地操作) 如果是,在这种情况下是否有所不同: 一个指数,或 一个或 一个对象 背景 我开始研究此问题的原因是在使用重复索引时遇到了非直觉的行为: 问题答案: 您需要意识到的第一件事是,它并不完全映射到,

  • 问题内容: 给定一个NumPy数组,如何将其转换为 原位 ?所以基本上,我想做 而不复制阵列。好大 这样做的原因是我有两种算法来计算。其中一个返回一个数组,另一个返回一个数组(这是两种不同算法所固有的)。所有进一步的计算都假定是的数组。 目前,我在通过调用的C函数中进行了转换。有没有办法在Python中做到这一点? 问题答案: 您可以使用其他dtype创建视图,然后就地复制到视图中: 产量 要显示

  • 问题内容: 如何扩展Swift 或带有自定义功能工具的类型? 浏览Swift的API文档可发现Array方法是的扩展,例如: 当复制和粘贴相同的源并尝试任何变体时,例如: 它无法生成并显示以下错误: 标称类型不能扩展 使用完整类型定义失败,即: 并且也无法使用和。 奇怪的是,Swift让我扩展了一个无类型数组: 它让我打电话给: 但是我无法创建适当的泛型类型扩展,因为当类型流过该方法时,该类型似乎

  • 当复制和粘贴相同的源并尝试任何变体时,如: 它无法生成,错误为: 无法扩展标称类型 奇怪的是,Swift让我用以下代码扩展一个非类型化数组: 它让我调用: 但是我不能创建一个合适的泛型类型扩展,因为当类型流经方法时,它似乎丢失了,例如,试图用以下内容替换Swift的内置筛选器:

  • 遵循以下文档:http://guides.micronaut.io/micronaut-database-authentication-provider-groovy/guide/index.html,您可以为auth/auth创建一个DB/DAO。如果为UserFetcher、PasswordEncoder和AuthoritiesFetcher提供实现,那么最好使用默认的DelegatingAu

  • 所以基本上没有能够/允许创建一个新数组。无法返回任何内容,但实际上更改和操作当前数组。您如何使用字符数组并简单地翻转/反转它们。 将每个单词按空格倒回 这就是我目前所拥有的 代码: 更新:好的,我发现的是。我需要做的是交换字符句子拼写的单词。使句子向后/颠倒。 注意:这是在此处的在线采访中尝试的:在此处输入链接描述