让a = np.arange(1, 4)
。
要获得a
的二维乘法表,我需要:
>>> a * a[:, None]
>>> array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
对于三维,我可以做以下工作:
>>> a * a[:, None] * a[:, None, None]
>>> array([[[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9]],
[[ 2, 4, 6],
[ 4, 8, 12],
[ 6, 12, 18]],
[[ 3, 6, 9],
[ 6, 12, 18],
[ 9, 18, 27]]])
如何编写一个函数,该函数以numpy数组a
和多个维n
作为输入,并输出a
的n
维乘法表。
发布于 2021-03-07 22:27:07
这应该能满足你的需要:
import itertools
a = np.arange(1, 4)
n = 3
def f(x, y):
return np.expand_dims(x, len(x.shape))*y
l = list(itertools.accumulate(np.repeat(np.atleast_2d(a), n, axis=0), f))[-1]
只需将n
更改为您需要的任何维度
发布于 2021-03-08 03:31:11
首先,我们可以使用numpy.expand_dims()
动态地提升列表/生成器理解中所需的数组维度,然后使用可迭代的产品工具,如中的numpy.expand_dims()
。然后,实现将如下面所示:
from math import prod
def n_dim_multiplication(arr, num_dims):
gen_arr = (np.expand_dims(a, axis=tuple(range(1, idx+1))) for idx in range(num_dims))
return prod(gen_arr)
3维情况下的示例运行:
# input array
In [83]: a = np.arange(1, 4)
# desired number of dimensions
In [84]: num_dims = 3
In [85]: n_dim_multiplication(a, num_dims)
Out[85]:
array([[[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9]],
[[ 2, 4, 6],
[ 4, 8, 12],
[ 6, 12, 18]],
[[ 3, 6, 9],
[ 6, 12, 18],
[ 9, 18, 27]]])
https://stackoverflow.com/questions/66521219
复制相似问题