在numpy矩阵中交换时出现“形状不匹配错误”

时间:2019-01-12 12:07:48

标签: python-2.7 numpy

我正在使用python2.7和numpy,并且具有以下矩阵:

L = np.asmatrix([[0,1,2,3,4], [5,6,7,8,9]])

并且我正在尝试将L [[0,1],0]与L [[1,0],0]交换,但是出现错误:

“形状不匹配:形状(2,1)的值数组无法广播到形状(2,)的索引结果”

我不明白这一点,因为如果我打印L [[0,1],0]和L [[1,0],0],它们会返回

L[[0,1], 0] = matrix([[0]
                      [5]])
L[[1,0], 0] = matrix([[5]
                      [0]])

无论如何,如果我用L [[0,1],:] = L [[1,0],:]交换整行,它可以完美工作,但这不是我想要的。

您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这似乎是np.matrix类的丑陋行为:如果您将L[[0,1], 0]写为表达式,则会得到一个(二维)矩阵,但是如果您尝试分配给{ {1}},NumPy希望您为它提供一维空间!

解决此问题的直接方法是将表达式作为二维切片写在左侧,用切片L[[0,1], 0]代替第二维的0

0:1

但是您几乎可以肯定只想避免完全使用L[[0,1], 0:1] = L[[1,0], 0] ,而只使用np.matrix。旧的NumPy矩阵是一个过时的,有一天要弃用的类。数组具有预期的行为,您可以编写以下代码:

np.array