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

扩展numpy ndarray的好方法?

全丰
2023-03-14
问题内容

有没有好的方法来“扩展”一个numpy ndarray?说我有一个ndarray这样的:

[[1 2]
 [3 4]]

我希望每一行通过填充零来包含更多元素:

[[1 2 0 0 0]
 [3 4 0 0 0]]

我知道必须有一些蛮力的方法(比如用零构造一个更大的数组,然后从旧的较小的数组中复制元素),只是想知道是否有Python的方法。尝试过numpy.reshape但没用:

import numpy as np
a = np.array([[1, 2], [3, 4]])
np.reshape(a, (2, 5))

Numpy抱怨: ValueError: total size of new array must be unchanged


问题答案:

有索引技巧r_c_

>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> z = np.zeros((2, 3), dtype=a.dtype)
>>> np.c_[a, z]
array([[1, 2, 0, 0, 0],
       [3, 4, 0, 0, 0]])

如果这是对性能至关重要的代码,则您可能更喜欢使用等效方法np.concatenate而不是索引技巧。

>>> np.concatenate((a,z), axis=1)
array([[1, 2, 0, 0, 0],
       [3, 4, 0, 0, 0]])

也有np.resizenp.ndarray.resize,但是它们有一些限制(由于numpy在内存中布置数据的方式),因此请读取那些上的文档字符串。您可能会发现,简单地串联会更好。

顺便说一句,当我需要执行此操作时,我通常只是按照您已经提到的基本方法进行操作(创建零数组并在其中分配较小的数组),我看不出有什么问题!



 类似资料:
  • 问题内容: 我想在我的JS代码中扔一些东西,我希望它们是Error的instanceof,但我也想让它们成为其他东西。 在Python中,通常将Exception子类化。 在JS中适合做些什么? 问题答案: 在ES6中:

  • 本文向大家介绍C#中的扩展方法,包括了C#中的扩展方法的使用技巧和注意事项,需要的朋友参考一下 扩展方法是静态方法,就像它们是扩展类型的实例方法一样被调用。使用扩展方法,您可以将方法添加到现有类型中,而无需创建新的派生类型,重新编译或修改原始类型。 以下是我们创建的扩展方法。 让我们看一个使用扩展方法的例子。 示例 输出结果

  • 试图在Gatling中运行多个模拟,但在运行每个模拟之前,我想做一个过程。在扩展模拟时,有没有一种扩展方法可以让所有扩展模拟的类都运行这段代码?

  • Fluentd 是另一个 Ruby 语言编写的日志收集系统。和 Logstash 不同的是,Fluentd 是基于 MRI 实现的,并不是利用多线程,而是利用事件驱动。 Fluentd 的开发和使用者,大多集中在日本。 配置示例 Fluentd 受 Scribe 影响颇深,包括节点间传输采用磁盘 buffer 来保证数据不丢失等的设计,也包括配置语法。下面是一段配置示例: <source> t

  • heka 是 Mozilla 公司仿造 logstash 设计,用 Golang 重写的一个开源项目。同样采用了input -> decoder -> filter -> encoder -> output 的流程概念。其特点在于,在中间的 decoder/filter/encoder 部分,设计了 sandbox 概念,可以采用内嵌 lua 脚本做这一部分的工作,降低了全程使用静态 Golang

  • 本节作者:松涛 nxlog 是用 C 语言写的一个跨平台日志收集处理软件。其内部支持使用 Perl 正则和语法来进行数据结构化和逻辑判断操作。不过,其最常用的场景。是在 windows 服务器上,作为 logstash 的替代品运行。 nxlog 的 windows 安装文件下载 url 见: http://nxlog.org/system/files/products/files/1/nxlog