当前位置: 首页 > 知识库问答 >
问题:

如何在numpy中堆叠数组和标量?

梁池暝
2023-03-14

我有一个数字向量(1-D数组)或标量(即数字)的列表。所有向量都有相同的长度,但我不知道那是什么。我需要vstack所有元素来创建一个矩阵(2-D数组),这样标量就被视为每个位置都有标量的向量。

示例是最好的描述:

案例一:

>>> np.vstack([np.array([1, 2, 3]), np.array([3, 2, 1])])
array([[1, 2, 3],
       [3, 2, 1]])

案例2:

>>> np.vstack([1, 2])
array([[1],
       [2]])

案例3:

>>> np.vstack([np.array([1, 2, 3]), 0, np.array([3, 2, 1])])
np.array([[1, 2, 3],
          [0, 0, 0],
          [3, 2, 1]])

案例1和案例2是开箱即用的。然而,在案例3中,情况并非如此,因为vstack需要所有元素都是相同长度的数组。

有什么好的方法(最好是一行)来实现这一点吗?

共有3个答案

劳法
2023-03-14

不是一个行,但可以用标量填充空数组。

>>> a = np.empty(4, dtype=int )
>>> a.fill(2)
>>> print(a)
[2 2 2 2]
东方建修
2023-03-14

这里的问题是填补可读的python世界和高效的Numpy世界之间的空白。

从实验上看,python在这项任务中往往比numpy更好,这是自相矛盾的。用l=[randint(10)如果n%2,则randint(0,10100)表示范围(32)内的n]

In [11]: %timeit array([x if type(x) is ndarray else [x]*100 for x in l])
1000 loops, best of 3: 655 µs per loop

In [12]: %timeit column_stack(broadcast(*l))
100 loops, best of 3: 3.77 ms per loop

此外广播被限制为32个元素。

章乐逸
2023-03-14

您可以创建广播对象,并调用np.column_stack

In [175]: np.column_stack(np.broadcast([1, 2, 3], 0, [3, 2, 1]))
Out[175]: 
array([[1, 2, 3],
       [0, 0, 0],
       [3, 2, 1]])

或者,您可以让NumPy将这些项目广播到形状兼容的阵列:

In [158]: np.broadcast_arrays([1, 2, 3], [3, 2, 1], 0)
Out[158]: [array([1, 2, 3]), array([3, 2, 1]), array([0, 0, 0])]

然后调用vstackrow_stack

In [176]: np.row_stack(np.broadcast_arrays([1, 2, 3], 0, [3, 2, 1]))
Out[176]: 
array([[1, 2, 3],
       [0, 0, 0],
       [3, 2, 1]])

在这两个选项(使用np.broadcastnp.broadcast_数组)中,np。广播更快,因为实际上不需要实例化广播的子数组。

np的一个限制。然而,广播,它最多可以接受32个参数。在这种情况下,使用np。广播阵列

 类似资料:
  • 问题内容: 如何堆叠x可以是任何数字的形状的按列向量? 例如, 工作正常,但沿着错误的尺寸连接。 问题答案: 简短答案:您不能。NumPy本机不支持锯齿数组。 长答案: 给出一个 可能或可能不 符合您预期的数组。例如,它不支持诸如或之类的基本方法,因此您应该像对待普通的Python列表那样对待它(对它进行迭代以执行操作而不是使用向量化的惯用法)。 存在几种可能的解决方法。最简单的是强迫和以共同的长

  • 问题内容: 我真的是Java Java编程的新手,我做了很多研究,但找不到这个问题的答案。 我有一个简单的用一个菜单,这里面我有一个日志的形式(分别为用户输入自己的用户名和密码),然后我想改变这种状况到另一这取决于用户想做的事情。 最好的方法是什么?我认为堆叠是可以的。但是在Netbeans中添加新内容后,它们不会堆叠。我读过某个地方应该使用Z排序或类似的命令,但在设计器视图中找不到它。 好吧,非

  • 我有一个像这样的熊猫架。 我想从帧中提取向量,像这样的矩阵。

  • 指定在堆叠顺序中的哪个位置添加新对象 Illustrator 从第一个对象开始顺序堆积所绘制的对象。 对象的堆叠方式将决定其重叠时如何显示。对象的堆叠顺序取决于您使用的绘图模式。在正常绘图模式下创建新图层时,新图层将放置在现用图层的正上方,且任何新对象都在现用图层的上方绘制出来。但是,在背面绘图模式下创建新图层时,新图层将放置在现用图层的正下方,且任何新对象都在选定对象的下方绘制出来(如果未选中任

  • 问题内容: 我有一个numpy数组,其中特定行的每个单元格代表一个功能的值。我将它们全部存储在100 * 4矩阵中。 知道如何将每个值都介于0和1之间的numpy.array的行标准化吗? 我想要的输出是: 提前致谢 :) 问题答案: 如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。 从示例数组开始: 在第0维(即行)上取最大值。这为您提供了一个大小向量,其中

  • 我需要一些帮助,以获得一个堆叠条形图的X和Y坐标,每个直方图在堆叠条形图。 有人请帮助获得X和Y坐标的每个矩形的堆叠酒吧悬停。 这是我引用的堆叠条形图的链接。