小编res*_*chu的帖子

Julia中的Array {Bool}和BitArray有什么区别?它们有什么关系?

我正在为布尔2d数组编写一个函数:

function foo(A::Array{Bool,2})
   ...
end
Run Code Online (Sandbox Code Playgroud)

用它评估和测试它

A = randbool(3,3)
foo(A)
Run Code Online (Sandbox Code Playgroud)

回报

ERROR: 'foo' has no method matching foo(::BitArray{2})
Run Code Online (Sandbox Code Playgroud)

显然,randbool()生成一个BitArray,而我认为randbool()会产生一个Array{Bool}.

如何Array{Bool}BitArray相关?为什么它们都存在?

我可以foo()用这样的方式编写它使用单一方法接受两种输入类型(因为我看不出差异)?

arrays boolean bitarray julia

20
推荐指数
1
解决办法
3809
查看次数

这个基准测试结果的原因是什么?

将rgb图像转换为灰度图像的两个函数:

function rgb2gray_loop{T<:FloatingPoint}(A::Array{T,3})
  r,c = size(A)
  gray = similar(A,r,c)
  for i = 1:r
    for j = 1:c
      @inbounds gray[i,j] = 0.299*A[i,j,1] + 0.587*A[i,j,2] + 0.114 *A[i,j,3]
    end
  end
  return gray
end
Run Code Online (Sandbox Code Playgroud)

和:

function rgb2gray_vec{T<:FloatingPoint}(A::Array{T,3})
  gray = similar(A,size(A)[1:2]...)
  gray = 0.299*A[:,:,1] + 0.587*A[:,:,2] + 0.114 *A[:,:,3]
  return gray
end
Run Code Online (Sandbox Code Playgroud)

第一个是使用循环,而第二个使用矢量化.

在对它们进行基准测试时(使用Benchmark包),我得到了不同大小的输入图像的以下结果(f1是循环版本,f2矢量化版本):

A = rand(50,50,3):

| Row | Function | Average     | Relative | Replications |
|-----|----------|-------------|----------|--------------|
| 1   | "f1"     | 3.23746e-5  | 1.0      | 1000 …
Run Code Online (Sandbox Code Playgroud)

benchmarking loops vectorization julia

11
推荐指数
1
解决办法
149
查看次数

在 Julia 中将 int 转换为 char 的最佳方法是什么?

我是 Julia 的新手,我想知道最好、方便、可读、最快的方法是什么。

示例:5 -> '5'

我现在最好的方法是:

c = string(i)[1]
Run Code Online (Sandbox Code Playgroud)

或者

c = char('0'+i)
Run Code Online (Sandbox Code Playgroud)

julia

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

3
推荐指数
1
解决办法
226
查看次数