Mathematica 相当于 Ruby 的注入

发布于 2024-09-03 14:17:39 字数 328 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唱一曲作罢 2024-09-10 14:17:40

等效项是折叠
我认为这更典型地称为“reduce”——无论如何,这就是 Python 的名称。

翻译一下你的例子:

Fold[#1*#2&, 1, list]

#1*#2& 是一个二进制 lambda 函数,它乘以它的参数。
在这种情况下,您可以只使用 Times 来代替:

Fold[Times, 1, list]

或者当然只需将 Times 应用于列表:

Apply[Times, list]

或者,简而言之:

Times @@ list

注意:问题中使用 Product 的版本而不是 Times 将不起作用。
Product 用于其他用途,即 求和

The equivalent is Fold.
I think this is more typically called "reduce" -- that's the Python name anyway.

Translating your example:

Fold[#1*#2&, 1, list]

That #1*#2& is a binary lambda function that multiplies its arguments.
In this case you could just use Times instead:

Fold[Times, 1, list]

Or of course just apply Times to the list:

Apply[Times, list]

Or, for short:

Times @@ list

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文