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

如何在NumPy中堆叠不同长度的向量?

闻人升
2023-03-14
问题内容

如何堆叠x可以是任何数字n的形状的按列向量(x,)

例如,

from numpy import *
a = ones((3,))
b = ones((2,))

c = vstack((a,b)) # <-- gives an error
c = vstack((a[:,newaxis],b[:,newaxis])) #<-- also gives an error

hstack 工作正常,但沿着错误的尺寸连接。


问题答案:

简短答案:您不能。NumPy本机不支持锯齿数组。

长答案:

>>> a = ones((3,))
>>> b = ones((2,))
>>> c = array([a, b])
>>> c
array([[ 1.  1.  1.], [ 1.  1.]], dtype=object)

给出一个 可能或可能不
符合您预期的数组。例如,它不支持诸如sum或之类的基本方法reshape,因此您应该像对待普通的Python列表那样对待[a, b]它(对它进行迭代以执行操作而不是使用向量化的惯用法)。

存在几种可能的解决方法。最简单的是强迫ab以共同的长度,可能使用掩蔽阵列或NaN到信号,一些索引在某些行无效。例如,这b是一个掩码数组:

>>> ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])
masked_array(data = [1.0 1.0 --],
             mask = [False False  True],
       fill_value = 1e+20)

可以将其堆叠a如下:

>>> ma.vstack([a, ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])])
masked_array(data =
 [[1.0 1.0 1.0]
 [1.0 1.0 --]],
             mask =
 [[False False False]
 [False False  True]],
       fill_value = 1e+20)

(出于某些目的,scipy.sparse可能也很有趣。)



 类似资料:
  • 我有一个数字向量(1-D数组)或标量(即数字)的列表。所有向量都有相同的长度,但我不知道那是什么。我需要所有元素来创建一个矩阵(2-D数组),这样标量就被视为每个位置都有标量的向量。 示例是最好的描述: 案例一: 案例2: 案例3: 案例1和案例2是开箱即用的。然而,在案例3中,情况并非如此,因为vstack需要所有元素都是相同长度的数组。 有什么好的方法(最好是一行)来实现这一点吗?

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

  • 我有两个长度不同的< code>Vec,例如: 我想成对迭代它们,打印: 我可以使用< code>Iterator::zip来获得在< code>xs和< code>ys中具有匹配元素的对: 但是对于“不匹配”位,我需要复杂的代码来检查长度并从其余部分中提取一部分。 我想要一个完全基于迭代器的解决方案,所以我尝试了: 这是不正确的,因为第一个循环跳过了在另一个列表中没有匹配的第一个元素(x=4)。

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

  • 问题内容: 我有一个numpy的数组,看起来像: 但是我不能弄平 如果将数组在第二个轴上更改为相同的长度,则可以将其展平。 我的问题是: 我可以使用诸如数组的大小及其元素的长度之类的东西来获取输出吗? 问题答案: 是一维 对象 数组。您的列表对象将仅使用或保持相同顺序。您可以用来按水平顺序堆叠数组: 请注意,这基本上等效于使用1的轴( 这在直觉上应该有意义 ): 但是,如果您 没有 这个问题并且

  • 问题内容: 我有一个形状为(12,)的numpy数组。我想重塑它,使[[1,2,3,4,5,6,7,8,9,10,11,12]]变为 我尝试了a.reshape(3,4)和a.reshape(-1,4),但是没有任何东西可以产生我想要的东西。有没有一种简单的方法可以做到这一点,还是我需要创建一个新数组并分别设置每个值? 问题答案: 重塑形状以将第一个轴分成两个,后者的长度和转置- 或按以下顺序重塑