Mathematica 相当于 Ruby 的注入
Ruby 中是否有类似 inject
的 Mathematica 函数?例如,如果我想要列表中元素的乘积,在 Ruby 中我可以这样写:
list.inject(1) { |prod,el| prod * el }
我发现我可以在 Mathematica 中使用 Product
:
Apply[Product, list]
但是,这对我来说还不够通用(比如,如果我不只想要乘积或数字之和)。与inject
最接近的等价物是什么?
Is there a Mathematica function like inject
in Ruby? For example, if I want the product of the elements in a list, in Ruby I can write:
list.inject(1) { |prod,el| prod * el }
I found I can just use Product
in Mathematica:
Apply[Product, list]
However, this isn't general enough for me (like, if I don't just want the product or sum of the numbers). What's the closest equivalent to inject
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
等效项是折叠。
我认为这更典型地称为“reduce”——无论如何,这就是 Python 的名称。
翻译一下你的例子:
#1*#2&
是一个二进制 lambda 函数,它乘以它的参数。在这种情况下,您可以只使用
Times
来代替:或者当然只需将
Times
应用于列表:或者,简而言之:
注意:问题中使用 Product 的版本而不是 Times 将不起作用。
Product 用于其他用途,即 求和。
The equivalent is Fold.
I think this is more typically called "reduce" -- that's the Python name anyway.
Translating your example:
That
#1*#2&
is a binary lambda function that multiplies its arguments.In this case you could just use
Times
instead:Or of course just apply
Times
to the list:Or, for short:
NOTE: The version in your question where you use Product instead of Times will not work.
Product is for something else, namely the analog of Sum.