当前位置: 首页 > 知识库问答 >
问题:

(Julia)快速对数组求列和

松洛华
2023-03-14

我有一个浮点数的 MxN 数组 A,我想进行以下操作:对于 A 的每一列,计算小于某个阈值(例如 0.5)的元素数量。

Julia执行此操作的最快方法是使用零初始化结果向量,然后按列遍历数组A并在需要时递增结果向量。例如,使用for循环执行此操作很容易

function count(A)
    (cols, rows) = size(A)
    result = fill(0, cols)
    for j in 1:rows
        for i in 1:cols
            result[i] += A[i,j] <= 0.5
        end
    end
end

这将按照与内存中的布局相同的顺序遍历 A,并且不会分配不必要的额外空间。但是,我不确定如何使用例如广播运营商来实现这一点。

sum(A .<= 0.5, dims=1)

但是这只是为了执行操作而分配新内存,并且比Count-函数慢2-3倍(我测试了高达8000x8000的数组)。有没有可能在只使用几行代码的情况下实现Count-函数的性能(如第二种方法)?

共有1个答案

梁丘宏硕
2023-03-14

我写你病情的一种自然方式是:

count.(<=(0.5), eachcol(A))

vec(sum(<=(0.5), A, dims=1))

(后者比前者稍慢,但执行的分配要少得多,因此性能平衡可能取决于矩阵的维度)

一般来说,两者都应该相当快速且易于阅读。

作为旁注 - 您的代码在行中而不是列中执行计数。这是更正它以在列中执行计数的方法:

function count2(A)
    (rows, cols) = size(A)
    result = fill(0, cols)
    for i in 1:cols
        for j in 1:rows
            result[i] += A[j,i] <= 0.5
        end
    end
    result
end

最后注意和(A.

 类似资料:
  • 我正在寻找一个快速的算法: 我有一个大小为n的int数组,目标是在数组中找到所有模式, 例如,我知道有一个大小为3的int数组是,那么只有一种可能性:12=3(考虑12=21) 我正在考虑实现对和Hashmap来使算法快速。(我现在得到的最快的仍然是 请分享你对这个问题的看法,谢谢

  • 问题内容: 试图了解如何比较数组。 苹果表示,阵列拷贝背后存在优化。看起来有时(并非总是)结构实际上是否被复制。 那就是 1)==遍历所有数组以执行基于元素的比较吗?(看起来像)->那么在非常大的阵列上的性能/内存使用情况如何? 2)我们确定如果所有元素都相等,==会返回true吗?我对Java字符串的==记忆犹新 3)有没有一种方法可以检查myArray1和myArray2在技术上是否使用相同的

  • Julia有一个非常好的特性,可以访问自己的语法树,这使得以编程方式生成新函数变得很容易,但它比普通的Julia代码慢得多。 例如: 有没有办法给提供与普通Julia代码相同的速度? @Ivarne建议我提供我的项目的细节。我想使用Julia的元编程功能来计算符号导数并运行它们。 我编写了一个函数,它接受and表达式和一个参数,并返回一个新表达式,该表达式是相对于的导数。不幸的是,结果需要太长时间

  • 问题内容: 我正在尝试解析以下JSON 这是我从Web服务获取的JSON,并且我正在使用以下代码对其进行解析: 我收到以下错误 该操作无法完成。(NSURLErrorDomain错误-1005。)致命错误:在展开可选值时意外发现nil 我该如何解决? 问题答案: 您的网址返回了以下JSON- 最外面的方括号表示根对象是一个数组,因此尝试将JSON解析的结果强制转换为NSDictionary会导致问

  • 问题内容: 一个可以被转换为使用,但有在新的没有这样的方法(与夫特1.2引入)。仍然可以通过将Swift Set转换为NSSet并使用该方法来完成,但这并不是最佳选择。 问题答案: 您可以简单地使用给定Swift的所有元素创建一个数组 之所以有效,是因为符合协议,并且可以使用序列进行初始化。例: