Numpy维度:与标量/矩阵相乘

2024-04-18 17:44:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量X,它可以是标量或数组。在这两种情况下,我都希望扩展X

y = np.array([0.5, 1.5])

如果X是标量,那么

(X*y).sum()

如果X是一个矩阵,比如说2维矩阵,我想这样做

(X[..., np.newaxis]*y[np.newaxis, np.newaxis, ...]).sum()

我正在用创建y

try:
    ndim = X.ndim
except AttributeError:
    ndim = 0
y = np.array([0.5, 1.5], ndmin=ndim+1)

它允许我用X[..., np.newaxis]*y进行乘法:y现在独立于我计算中X的形状。但是,如果X是矩阵,我仍然需要做X[..., np.newaxis],如果它是标量,我只需要做X。你知道吗

如何在代码开始时操纵X,以便

(X*y).sum()

以及以后类似的操作,不管X是否是矩阵?你知道吗


Tags: np情况矩阵数组arrayattributeerror形状sum
1条回答
网友
1楼 · 发布于 2024-04-18 17:44:08

不需要y中的np.newaxis。没有它们你也能得到同样的结果。对于X,我想您可以执行以下操作:

if type(X) == np.ndarray:
    result = (X[..., np.newaxis] * y).sum()
else:
    result = (X * y).sum()

如果要将其推广到多个操作,只需在代码中的某个位置添加一行即可:

X = X[..., np.newaxis] if type(X) == np.ndarray else X

稍后只需使用(X * y).sum(),因为它将同时适用于X = numberX = ndarray。你知道吗

至于y,您不需要添加数字维度,numpy有smart broadcasting用于乘法。你知道吗

完整示例:

>>> x1 = 5
>>> x2 = np.random.rand(3,3)
>>> y  = np.array([0.5, 0.5])
>>> (x1 * y).sum() # works fine
>>> (x2[..., np.newaxis] * y).sum() # also works fine

相关问题 更多 >