You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成元素为自身坐标向量、shape为(n,)*n的NumPy数组?

解决方案

你遇到的问题是因为numpy.fromfunction会将函数返回的序列(比如list、tuple)拆解为多个独立数组,而不是合并成一个带最后一维的数组。要生成每个元素为自身坐标向量的数组,有两种简洁的方法:

方法1:改进fromfunction的函数逻辑

让lambda函数返回一个堆叠后的数组,把各个坐标维度合并到最后一维:

import numpy as np

def coords(n):
    M = np.fromfunction(
        lambda *i: np.stack(i, axis=-1),
        shape=(n,)*n
    )
    return M

调用coords(2)会得到你期望的结果:

array([[[0., 0.],
        [0., 1.]],
       [[1., 0.],
        [1., 1.]]])

这里np.stack(i, axis=-1)把每个位置的坐标参数(比如n=2时的i,j)堆叠成一个长度为n的向量,fromfunction就会生成shape=(n,)*n + (n,)的数组,正好符合需求。

方法2:用meshgrid生成坐标网格(更直观)

如果不想用fromfunction,可以直接生成各维度的坐标网格,再堆叠到最后一维:

import numpy as np

def coords(n):
    # 生成n个0到n-1的数组,用meshgrid生成坐标网格(indexing='ij'保证索引顺序正确)
    grids = np.meshgrid(*[np.arange(n)]*n, indexing='ij')
    # 把所有网格堆叠到最后一维,得到每个位置的坐标向量
    return np.stack(grids, axis=-1)

这种方法逻辑更直白,indexing='ij'是关键——它保证第一维对应第一个坐标、第二维对应第二个坐标,和你示例中的输出顺序一致。

内容的提问来源于stack exchange,提问作者Isaac Feldman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:07:38