使用numpy在Python中扩展矩阵
我正在尝试给一个矩阵增加一些内容,以便解决一个方程,但一直没能成功。是的,我看过“在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
我把你的代码放进了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
是二维的,而其他的都是一维的。对于一维数组,.T
这个操作没有任何效果。
试着把 b1
改成二维的。同时,确保你在正确的轴上进行拼接。
In [7]: b1 = numpy.array([[-1,3]]).T
In [9]: b1.shape
Out[9]: (2, 1)
0
numpy.concatenate()
这个函数要求所有的数组维度必须相同,所以你需要把一维的向量变成二维的,可以用 None
或者 numpy.newaxis
来实现,像这样:
>>> 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]])
可以查一下源代码,了解它们是怎么工作的 ;-)
4
你可以像对待列向量一样,把一维数组叠加在一起,使用的是 np.column_stack
这个函数。这样就能实现你想要的效果:
>>> np.column_stack((a, b1, b2))
array([[ 1, 2, -1, 1],
[ 5, 12, 3, -5]])