首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >N维数的乘积表的推广

N维数的乘积表的推广
EN

Stack Overflow用户
提问于 2021-03-07 20:43:32
回答 2查看 159关注 0票数 1

a = np.arange(1, 4)

要获得a的二维乘法表,我需要:

代码语言:javascript
运行
复制
>>> a * a[:, None]      
>>> array([[1, 2, 3],
           [2, 4, 6],
           [3, 6, 9]])

对于三维,我可以做以下工作:

代码语言:javascript
运行
复制
>>> 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作为输入,并输出an维乘法表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-07 22:27:07

这应该能满足你的需要:

代码语言:javascript
运行
复制
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更改为您需要的任何维度

票数 0
EN

Stack Overflow用户

发布于 2021-03-08 03:31:11

首先,我们可以使用numpy.expand_dims()动态地提升列表/生成器理解中所需的数组维度,然后使用可迭代的产品工具,如中的numpy.expand_dims()。然后,实现将如下面所示:

代码语言:javascript
运行
复制
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维情况下的示例运行:

代码语言:javascript
运行
复制
# 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]]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66521219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档