小编Eri*_*son的帖子

如何在 Julia 中有效计算二次形式?

我想计算一个二次形式:x' Q y在 Julia 中。
对于这种情况,计算此值的最有效方法是什么:

  1. 没有假设。
  2. Q是对称的。
  3. xy相同(x = y)。
  4. 两者Q都是对称的并且x = y.

我知道朱莉娅有dot()。但我想知道它是否比 BLAS 调用更快。

performance julia quadratic-programming

23
推荐指数
4
解决办法
1493
查看次数

在 Julia 中创建一个同时返回两个值的生成器

给定一个生成器:

\n
myVec1 = rand(0:4, 2)\nmyVec2 = rand(0:4, 8)\n\nmyGen = (val1 + val2 for val1 in myVec1, val2 in myVec2)\n
Run Code Online (Sandbox Code Playgroud)\n

这基本上是一个有 2 列的矩阵。通过使用可以看出collect(myGen)

\n

如何创建一个每次调用生成两个值(基本上是一列)的生成器?

\n

从概念上讲,相当于:

\n
for myCol in eachcol(collect(myGen))\n    @show myCol;\nend\n
Run Code Online (Sandbox Code Playgroud)\n

只是没有对矩阵进行任何显式分配。

\n

我可以myGen针对以下情况进行包装吗:

\n
for value1, value2 in myGen\n  dosomethingelse1(value1, value2)\nend\n
Run Code Online (Sandbox Code Playgroud)\n

换句话说,我正在寻找一种方法来创建一个生成器,它一次返回 2 个(或更多?)连续值,并且可以在循环中使用它来执行此操作。

\n

所以基本上,我们在生成器中创建一个二维数组,我想立即访问整个切片。我可以使用实际数组来完成它eachcoleachrow但是生成器呢?

\n

这是一个测试用例:

\n
myVec1 = rand(0:4, 2);\nmyVec2 = rand(0:4, 800);\n\n@btime begin\n    myMat = [val1 + val2 for val1 in …
Run Code Online (Sandbox Code Playgroud)

generator julia

6
推荐指数
1
解决办法
319
查看次数