Python Numpy维度:与标量/矩阵的乘法

Python Numpy维度:与标量/矩阵的乘法,python,numpy,Python,Numpy,我有一个变量X,它可以是标量或数组。在这两种情况下,我都希望扩展X y = np.array([0.5, 1.5]) try: ndim = X.ndim except AttributeError: ndim = 0 y = np.array([0.5, 1.5], ndmin=ndim+1) 如果X是标量,则 (X*y).sum() 如果X是一个矩阵,比如说二维矩阵,我想 (X[..., np.newaxis]*y[np.newaxis, np.newaxis, ...

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

y = np.array([0.5, 1.5])
try:
    ndim = X.ndim
except AttributeError:
    ndim = 0
y = np.array([0.5, 1.5], ndmin=ndim+1)
如果
X
是标量,则

(X*y).sum()
如果
X
是一个矩阵,比如说二维矩阵,我想

(X[..., np.newaxis]*y[np.newaxis, np.newaxis, ...]).sum()
我正在使用创建
y

y = np.array([0.5, 1.5])
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
,以便

(X*y).sum()

以及以后类似的操作,无论
X
是否为矩阵?

都不需要
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=number
X=ndarray

对于
y
,您不需要添加数字维度,numpy具有乘法的功能

一个完整的例子:

>>> 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

@dbliss是的,我假设这个问题非常基本,以至于代码实际上用于演示我想要的内容,而不是运行一个示例。但我解决了这个问题,因为我总是很感激新来者的尖刻评论。是的,我是个尖刻的家伙,但我不是一个真正的新来者。您想要“扩展”
X
,这是什么意思?为什么以后需要执行
(X*y).sum()
?当
X
是矩阵时,为什么不可以执行
(X[…,np.newaxis]*y[np.newaxis,np.newaxis,…]).sum()