使用numpy在Python中扩展矩阵

0 投票
3 回答
15809 浏览
提问于 2025-04-18 14:32

我正在尝试给一个矩阵增加一些内容,以便解决一个方程,但一直没能成功。是的,我看过“在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]])

撰写回答