2024-03-28 20:19:43 发布
网友
我有一个一维的标量值数组
Y = np.array([1, 2])
我还有一个三维数组:
X = np.random.randint(0, 255, size=(2, 2, 3))
我试图从X中减去Y的每个值,所以我应该返回Z,它的形状应该是(2,2,2,3)或者(2,2,2,3)。你知道吗
X
Y
Z
我似乎不知道如何通过广播来做到这一点。你知道吗
我试着改变Y的变化:
Y = np.array([[[1, 2]]])
但不确定正确的形状应该是什么。你知道吗
广播在右边排列。所以您希望对(2, 1, 1, 1)数组和(2, 2, 3)数组进行操作。你知道吗
(2, 1, 1, 1)
(2, 2, 3)
我能想到的最简单的方法是使用^{}:
Y = Y.reshape(-1, 1, 1, 1)
更一般地说:
Y = Y.reshape(-1, *([1] * X.ndim))
至多reshape的一个参数可以是-1,表示其他维度未考虑的所有剩余大小。你知道吗
reshape
要获得形状Z(2, 2, 2, 3)的Z:
(2, 2, 2, 3)
Z = X - Y.reshape(-1, *([1] * X.ndim))
如果您对Z的形状(2, 2, 3, 2)满意,那么操作会简单得多:
(2, 2, 3, 2)
Z = X[..., None] - Y
None或np.newaxis将在X形状的末端插入一个单位轴,使其与1D Y正确广播。你知道吗
None
np.newaxis
我不完全确定要在哪个维度上进行减法,但是如果定义Y,例如Y = numpy.array([1,2]).reshape(2, 1, 1)或Y = numpy.array([1,2]).reshape(1, 2, 1),则X - Y不会返回错误。你知道吗
Y = numpy.array([1,2]).reshape(2, 1, 1)
Y = numpy.array([1,2]).reshape(1, 2, 1)
X - Y
广播在右边排列。所以您希望对
(2, 1, 1, 1)
数组和(2, 2, 3)
数组进行操作。你知道吗我能想到的最简单的方法是使用^{} :
更一般地说:
至多
reshape
的一个参数可以是-1,表示其他维度未考虑的所有剩余大小。你知道吗要获得形状
Z
(2, 2, 2, 3)
的Z
:如果您对
Z
的形状(2, 2, 3, 2)
满意,那么操作会简单得多:None
或np.newaxis
将在X
形状的末端插入一个单位轴,使其与1DY
正确广播。你知道吗我不完全确定要在哪个维度上进行减法,但是如果定义Y,例如
Y = numpy.array([1,2]).reshape(2, 1, 1)
或Y = numpy.array([1,2]).reshape(1, 2, 1)
,则X - Y
不会返回错误。你知道吗相关问题 更多 >
编程相关推荐