gpt4 book ai didi

python - NumPy 广播不起作用

转载 作者:太空狗 更新时间:2023-10-30 02:29:47 24 4
gpt4 key购买 nike

我正在尝试广播两个向量之间的差异。这适用于像这样的简单情况:

In[1] : data = np.array([1,2])
In[2] : centers = np.array([[2,2],[3,3]])

In[3] : data - center

Out[3] : array([[-1, 0],
[-2, -1]])

但是当我尝试做同样的事情但尺寸更大时,这是行不通的

In [4]: data = np.array([[1,2],[3,4],[6,7]])
In [5]: data
Out [5]: array([[1,2],
[3,4],
[6,7]])

In [6]: centers = np.array([[2,2],[3,3]])
In [7]: centers
Out [7]: array([[2,2],
[3,3]])

我想执行 data - centers 这样我就可以得到输出:

array([[[-1,0],
[-2,-1]],
[[1,2],
[0,1]],
[[4,5],
[3,4]]]

最佳答案

在这种情况下,您需要在 data 中插入一个额外的轴:

>>> data[:, None] - centers
array([[[-1, 0],
[-2, -1]],

[[ 1, 2],
[ 0, 1]],

[[ 4, 5],
[ 3, 4]]])

最初 data.shape(3, 2)centers.shape(2, 2) . NumPy 无法一起广播具有这些形状的数组,因为第一个轴的长度不兼容(它们的长度需要相同,或者其中一个需要为 1 )。

插入额外维度,data[:, None]有形状 (3, 1, 2)然后轴的长度正确对齐:

(3, 1, 2) 
(2, 2)
# #
# # lengths are equal for this axis
#
# 1 is compatible with any length

关于python - NumPy 广播不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30683852/

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