【发布时间】:2018-03-19 19:21:09
【问题描述】:
在 Python 中,我想评估一个数组的函数,但是,一个对数组(或更一般的数组)。
我知道我可以对一组标量执行此操作:
def f_test(scalar, pair):
return scalar + pair[0] + pair[1]
result = f_test(numpy.linspace(0, 9, 10), [3, 4])
并得到想要的结果:
[ 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.]
所以这对是固定的,标量是从数组中获取的。
问题是:可以换一种方式吗?在标量保持固定的情况下... 可以从向量中提取对以再次获得与结果长度相同的向量吗?
那是为了(例如,不一定是 numpy.array)
scalar = 0
pair = numpy.array([ [1,2], [3,7], [5,8] ])
获得
[ 3, 10, 13 ]
而不是
[4, 9]
注意:我已经大大简化了我需要对数字执行的操作,以保持示例简单。
如果无法完成或更笼统:在大量数组上执行相同操作的最佳做法是什么(在 Python 中!)?
注意:我正在搜索这个主题,甚至发现了一些类似的问题。但是,我不确定它们是否真的相同,更重要的是没有找到答案。由于在我看来这是一个普遍可取的操作,我提出了一个单独的问题。
【问题讨论】:
-
尽管有名称,但您的函数不适用于
scalar。它将pair的两个元素添加到数组中,即将两个标量添加到数组中。我怀疑您需要更多练习来添加不同形状的数组。关键是了解广播的工作原理。 -
是的,您可以这样做,但是如果您的计算可以表示为线性代数,那么这将被表述为矩阵乘法问题,它会快得多。特别是您可以使用旧的 3D 图形技巧并添加一个 1 的虚拟行来处理术语
scalar * 1。所以让你的输入是一个 3 x m 矩阵,其中第三行是一个。你需要告诉我们更多关于你的实际计算是什么。
标签: python arrays numpy vectorization