我正在使用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],:]交换整行,它可以完美工作,但这不是我想要的。
您有什么建议吗?
答案 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