我正在尝试增加一个矩阵来解决一个方程,但却无法解决。是的,我看到了“在NumPy中增加一个矩阵”的问题;这不是我需要的。
所以我的问题:创建一个增强矩阵[A b1 b2 ]
import numpy
a = numpy.array([[1,2],[5,12]])
b1 = numpy.array([-1,3]).T
b2 = numpy.array([1,-5]).T
我尝试过numpy.concatenate函数,返回
ValueError:所有输入数组必须具有相同的维数
有没有办法扩充矩阵,这样我就有一个
数组[1 2 -1 1
5 12 3 -5]
如果有人知道,请通知我!请注意,我在IPython笔记本中执行此操作
(顺便说一句,我知道我不能用Numpy来减少它,这是一个大学问题,而且只是在IPython中完成剩下的工作)
由于 马特
答案 0 :(得分:2)
您可以使用np.column_stack
函数堆叠1D数组,就好像它们是列向量一样。这应该做你想做的事情:
>>> np.column_stack((a, b1, b2))
array([[ 1, 2, -1, 1],
[ 5, 12, 3, -5]])
答案 1 :(得分:0)
我把你的代码放到Ipython中,并询问数组形状:
In [1]: a = numpy.array([[1,2],[5,12]])
In [2]: b1 = numpy.array([-1,3]).T
In [3]: b2 = numpy.array([1,-5]).T
In [4]: a.shape
Out[4]: (2, 2)
In [5]: b1.shape
Out[5]: (2,)
In [6]: b2.shape
Out[6]: (2,)
注意a
有2个维度,其他1
。 .T
对1d数组没有任何作用。
尝试将b1
设为2d。还要确保你在右轴上连接。
In [7]: b1 = numpy.array([[-1,3]]).T
In [9]: b1.shape
Out[9]: (2, 1)
答案 2 :(得分:0)
numpy.concatenate()
要求所有数组都具有相同数量的维度,因此您必须使用None
或numpy.newaxis
将1d向量扩展为2d,如下所示:
>>> numpy.concatenate((a, b1[:,None], b2[:,None]), axis=1)
array([[ 1, 2, -1, 1],
[ 5, 12, 3, -5]])
还有用于行/列连接的缩写r_
和c_
,它们模仿了Matlab的符号:
>>> from numpy import c_
>>> c_[a, b1, b2]
array([[ 1, 2, -1, 1],
[ 5, 12, 3, -5]])
查找源代码以了解它们的工作原理; - )