使用numpy在Python中扩充矩阵

时间:2014-07-24 00:03:38

标签: python arrays numpy

我正在尝试增加一个矩阵来解决一个方程,但却无法解决。是的,我看到了“在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中完成剩下的工作)

由于 马特

3 个答案:

答案 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()要求所有数组都具有相同数量的维度,因此您必须使用Nonenumpy.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]])

查找源代码以了解它们的工作原理; - )