Numpy,用标量乘以数组

50

有没有可能使用ufuncshttps://docs.scipy.org/doc/numpy/reference/ufuncs.html将函数映射到数组(1D和/或2D)和标量?
如果不能,我应该怎么做才能实现这个目的呢?
例如:

a_1 = np.array([1.0, 2.0, 3.0])
a_2 = np.array([[1., 2.], [3., 4.]])
b = 2.0  

预期结果:

a_1 * b = array([2.0, 4.0, 6.0]);  
a_2 * b = array([[2., 4.], [6., 8.]])

如果与问题相关,我正在使用Python 2.7。


1
你使用了 numpy 标签,但是你正在使用列表。请使用 numpy 数组,它会正常工作。 - user2261062
只需将其转换为np.arrays: np.array(a_1)*bnp.array(a_2)*b - sacuL
如果嵌套列表不是不规则的(如你的例子),它也应该适用于嵌套列表。 - sacuL
2个回答

65

你可以用标量乘以NumPy数组,它会直接运算。

>>> import numpy as np
>>> np.array([1, 2, 3]) * 2
array([2, 4, 6])
>>> np.array([[1, 2, 3], [4, 5, 6]]) * 2
array([[ 2,  4,  6],
       [ 8, 10, 12]])

这也是一个非常快速和高效的操作。以您的示例为例:

>>> a_1 = np.array([1.0, 2.0, 3.0])
>>> a_2 = np.array([[1., 2.], [3., 4.]])
>>> b = 2.0
>>> a_1 * b
array([2., 4., 6.])
>>> a_2 * b
array([[2., 4.],
       [6., 8.]])

这适用于任何ufunc吗? - ktv6
我不确定你的意思,但是这个链接可能会有所帮助。 - iz_

14

使用.multiply()ufunc multiply)函数

a_1 = np.array([1.0, 2.0, 3.0])
a_2 = np.array([[1., 2.], [3., 4.]])
b = 2.0 

np.multiply(a_1,b)
# array([2., 4., 6.])
np.multiply(a_2,b)
# array([[2., 4.],[6., 8.]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接