如何堆叠x可以是任何数字n的形状的按列向量(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 工作正常,但沿着错误的尺寸连接。
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]它(对它进行迭代以执行操作而不是使用向量化的惯用法)。
sum
reshape
[a, b]
存在几种可能的解决方法。最简单的是强迫a和b以共同的长度,可能使用掩蔽阵列或NaN到信号,一些索引在某些行无效。例如,这b是一个掩码数组:
a
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可能也很有趣。)
scipy.sparse