【发布时间】:2010-12-25 01:08:57
【问题描述】:
我想创建一个 lambda 函数,它接受两个 numpy 数组并将第一个切片设置为第二个,并返回新设置的 numpy 数组。
考虑到你不能在 lambda 函数中赋值,有没有办法做类似的事情?
这里的上下文是我想在一行中将 zeros 数组的中心设置为另一个数组,而我能想出的唯一解决方案是使用 reduce 和 lambda 函数。
即我正在考虑浓缩这个(给定 b 的地方):
a = numpy.zeros( numpy.array(b.shape) + 2)
a[1:-1,1:-1] = b
成一行。这可能吗? 这只是oneliners中的一个练习。我有代码做我想做的事,我只是想知道它的乐趣:)。
【问题讨论】:
-
将
a[1:-1,1:-1]替换为a[[slice(1,-1)]*a.ndim]以支持a.ndim != 2。numpy.put、numpy.place等允许就地更改数组。 -
这听起来很复杂,如果您关心“pythonic”,您可能不应该使用 lambda。 lambda 被限制在一行的原因正是因为它很容易被它们忘掉。没有其他技术原因。