我想生成形状为
(n,)*n
的数组,其元素是元素自己的坐标向量。例如 n=2
的情况是:
array([[[0,0], [0,1]],
[[1,0], [1,1]]])
目前我有代码:
def coords(n):
M = numpy.fromfunction(
function = lambda *i: list(i),
shape = (n,)*n
)
return M
但是,这会输出一个
n
数组列表,每个形状为 (n,)*n
,其中第 m 个数组是第 m 个坐标的投影。例如,对于 coords(2)
输出:
[array([[0., 0.],
[1., 1.]]),
array([[0., 1.],
[0., 1.]])]
...所以第一个数组是 x 坐标的投影,第二个数组是 y 坐标的投影。
我相信这是因为 lambda 函数不能有向量输出?如果是这样,除了 lambda 函数之外,我还可以在
numpy.fromfunction
表达式内部使用什么?我应该使用与 numpy.fromfunction
完全不同的东西吗?
任何帮助将非常感激!谢谢!
无需使用函数,只需
transpose
数组的 indices
:
np.transpose(np.indices((2, 2)), axes=(1, 2, 0))
#array([[[0, 0],
# [0, 1]],
# [[1, 0],
# [1, 1]]])