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()
?