我有这些 numpy 对象:
>>> x = np.matrix([[1],[2],[3]])
>>> i = ([1,2],0)
>>> y = np.matrix([[4],[5]])
当我执行x[i]
时,我得到了我所期望的:
>>> x[i]
matrix([[2],
[3]])
但是,当我尝试分配给 x[i]
时,我得到了奇怪的行为:
>>> x[i] = y
ValueError: array is not broadcastable to correct shape
>>> y.shape
(2, 1)
>>> x[i].shape
(2, 1)
我已经找到了一些解决方法,但它们只是解决方法,而不是我想要的:
>>> x[1:,0] = y
>>> x
matrix([[1],
[4],
[5]])
>>> x = np.array([[1],[2],[3]]); y = np.array(y)
>>> x[i] = y[:,0]
>>> x
array([[1],
[4],
[5]])
第二种解决方法是 Not Acceptable ,因为 y
可能具有比列向量更通用的形状。
最佳答案
不要使用numpy.matrix
。它是可怕的。它会导致许多奇怪的不兼容性,并且有许多不一致的地方,包括这个。
使用numpy.array
。对于数组,x[i]
是一维的,将形状相同的一维 y
分配给 x[i]
就可以了很好。
import numpy
x = numpy.array([[1], [2], [3]])
y = numpy.array([4, 5])
i = ([1, 2], 0)
print(x[i].shape)
print(y.shape)
x[i] = y
print(repr(x))
Output :
(2,)
(2,)
array([[1],
[4],
[5]])
如果您想进行矩阵乘法,请使用 @
运算符,或者如果您使用的 Python 版本太旧或 NumPy 版本太旧,请使用 dot
方法拥有@
。
关于python - 使用索引数组广播 numpy 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057142/