我有一个Python函数,它接受标量或向量a
,执行某种对称扩展操作,例如:
import numpy
def expand(a):
zero = numpy.zeros_like(a)
return numpy.array([
[zero, a, a],
[a, zero, a],
[a, a, zero],
#
[zero, -a, -a],
[-a, zero, -a],
[-a, -a, zero],
])
在这个例子中,最终的数组形状将会是 (6, 3, a.shape)
。最终我需要的是形状为 (6, a.shape, 3)
或者 (3, a.shape, 6)
并且是连续的,所以我会使用 numpy.moveaxis()
进行移动。即使是 (3, 6, a.shape)
都比现在好很多。我可以使用以下代码实现:
import numpy
def expand(a):
zero = numpy.zeros_like(a)
return numpy.array([
[zero, a, a, zero, -a, -a],
[a, zero, a, -a, zero, -a],
[a, a, zero, -a, -a, zero]
])
但这个版本不如第一个版本易读,特别是当转换更加复杂时。(始终存在3列。)
有没有一种方式可以直接初始化out
的正确形状?(请注意,reshape()
不能做到这一点,数据将以错误的顺序排列。)