gpt4 book ai didi

python - 使用索引数组广播 numpy 矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:25 24 4
gpt4 key购买 nike

我有这些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com