如何将 numpy 数组乘以列表以获得多维数组?
How to multiply a numpy array by a list to get a multidimentional array?
在Python中,我有一个列表和一个numpy数组。
我想将数组乘以列表,这样我得到一个数组,其中第 3 维代表输入数组乘以列表的每个元素。因此:
in_list = [2,4,6]
in_array = np.random.rand(5,5)
result = ...
np.shape(result) ---> (3,5,5)
其中 (0,:,:) 是输入数组乘以列表 (2) 的第一个元素;
(1,:,:) 是输入数组乘以列表的第二个元素 (4) 等
我觉得这个问题会通过广播来回答,但我不确定如何解决这个问题。
你想要np.multiply.outer
。 outer
方法是为任何 NumPy "ufunc" 定义的,包括乘法。这是一个演示:
In [1]: import numpy as np
In [2]: in_list = [2, 4, 6]
In [3]: in_array = np.random.rand(5, 5)
In [4]: result = np.multiply.outer(in_list, in_array)
In [5]: result.shape
Out[5]: (3, 5, 5)
In [6]: (result[1, :, :] == in_list[1] * in_array).all()
Out[6]: True
正如您所建议的,广播提供了另一种解决方案:如果将 in_list
转换为长度为 3
的一维 NumPy 数组,则可以重新整形为形状为 (3, 1, 1)
的数组,然后与 in_array
的乘法将适当地广播:
In [9]: result2 = np.array(in_list)[:, None, None] * in_array
In [10]: result2.shape
Out[10]: (3, 5, 5)
In [11]: (result2[1, :, :] == in_list[1] * in_array).all()
Out[11]: True
在Python中,我有一个列表和一个numpy数组。
我想将数组乘以列表,这样我得到一个数组,其中第 3 维代表输入数组乘以列表的每个元素。因此:
in_list = [2,4,6]
in_array = np.random.rand(5,5)
result = ...
np.shape(result) ---> (3,5,5)
其中 (0,:,:) 是输入数组乘以列表 (2) 的第一个元素; (1,:,:) 是输入数组乘以列表的第二个元素 (4) 等
我觉得这个问题会通过广播来回答,但我不确定如何解决这个问题。
你想要np.multiply.outer
。 outer
方法是为任何 NumPy "ufunc" 定义的,包括乘法。这是一个演示:
In [1]: import numpy as np
In [2]: in_list = [2, 4, 6]
In [3]: in_array = np.random.rand(5, 5)
In [4]: result = np.multiply.outer(in_list, in_array)
In [5]: result.shape
Out[5]: (3, 5, 5)
In [6]: (result[1, :, :] == in_list[1] * in_array).all()
Out[6]: True
正如您所建议的,广播提供了另一种解决方案:如果将 in_list
转换为长度为 3
的一维 NumPy 数组,则可以重新整形为形状为 (3, 1, 1)
的数组,然后与 in_array
的乘法将适当地广播:
In [9]: result2 = np.array(in_list)[:, None, None] * in_array
In [10]: result2.shape
Out[10]: (3, 5, 5)
In [11]: (result2[1, :, :] == in_list[1] * in_array).all()
Out[11]: True