我正在为布尔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()用这样的方式编写它使用单一方法接受两种输入类型(因为我看不出差异)?
将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) 我是 Julia 的新手,我想知道最好、方便、可读、最快的方法是什么。
示例:5 -> '5'
我现在最好的方法是:
c = string(i)[1]
Run Code Online (Sandbox Code Playgroud)
或者
c = char('0'+i)
Run Code Online (Sandbox Code Playgroud) 一些编程语言评估
5 == true
Run Code Online (Sandbox Code Playgroud)
为真,或允许
if 5 then expr
Run Code Online (Sandbox Code Playgroud)
将5转换为bool.
朱莉娅没有.为什么?