我对np.append
有问题。
我试图使用下面的代码复制20x361 matrixn_list_converted
的最后一列:
n_last = []
n_last = n_list_converted[:, -1]
n_lists = np.append(n_list_converted, n_last, axis=1)
但我错了:
ValueError: all the input arrays must have same number of dimensions
但是,我已经通过
print(n_last.shape, type(n_last), n_list_converted.shape, type(n_list_converted))
我得到了
(20L,) (20L, 361L)
尺寸匹配吗?哪里出错了?
得到错误的原因是因为“1乘n”矩阵不同于长度为n的数组
我建议改用
hstack()
和vstack()
。 像这样:注意重复的“7,15,23,31”栏。 另外,请注意,我使用了
a[:,-1:]
,而不是a[:,-1]
。我的版本生成一个列:而不是一行
array([7,15,23,31])
编辑:
append()
要慢得多。阅读this answer。(n,)和(n,1)不是同一形状。尝试使用
[:, None]
符号将向量转换为数组:或者,在提取
n_last
时,可以使用获取
(20, 1)
数组。如果我从一个3x4数组开始,并将一个3x1数组与轴1连接,则得到一个3x5数组:
注意,要连接的两个输入都有两个维度。
省略
:
,并且x[:,-1]
是(3,)形状-它是1d,因此错误:np.append
的代码是(在这种情况下,指定了axis)所以只要稍微改变一下语法
append
就行了。它需要两个参数而不是一个列表。它模仿listappend
是语法,但不应与list方法混淆。np.hstack
首先确保所有输入都是atleast_1d
,然后进行连接:所以它需要相同的
x[:,-1:]
输入。基本上相同的动作。np.column_stack
也在轴1上执行连接。但首先它通过1d输入这是将(3,)数组转换为(3,1)数组的一般方法。
所有这些“堆栈”都很方便,但从长远来看,理解维度和基
np.concatenate
很重要。还知道如何查找此类函数的代码。我经常使用ipython
??
魔法。在时间测试中,
np.concatenate
的速度明显更快-使用这样的小数组,函数调用的额外层会产生很大的时间差异。相关问题 更多 >
编程相关推荐