如何在NumPy中堆叠不同长度的向量?
如何堆叠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]它(对它进行迭代以执行操作而不是使用向量化的惯用法)。
存在几种可能的解决方法。最简单的是强迫a
和b
以共同的长度,可能使用掩蔽阵列或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
可能也很有趣。)
以上是 如何在NumPy中堆叠不同长度的向量? 的全部内容, 来源链接: utcz.com/qa/409729.html