gpt4 book ai didi

在 Julia 中追加

转载 作者:行者123 更新时间:2023-12-05 03:24:33 25 4
gpt4 key购买 nike

我是 Julia 的新手。 A 很好奇我如何 append 值。每次 bool 值为 True 时,我都希望 b 增长。然后输出它的大小。

function f(img_deformed, img)
s = size(img)[1]
for i in range(1,s,step=1)
for j in range(1,s,step=1)
b = img_deformed[i,j] == img[i,j]
end
end
return b
end

最佳答案

如果您希望 b 成为一个向量来跟踪满足 for 循环中的相等性的次数,您可以使用 push!:

function f(img_deformed, img)
s = size(img)[1]
b = Vector{Bool}() # Can also use Bool[]
for i in range(1,s,step=1)
for j in range(1,s,step=1)
if img_deformed[i,j] == img[i,j]
push!(b, true)
end
end
end
return length(b)
end

但是,如果您真正关心的是 true 的数量,那么使用 b 作为计数器会更容易(而且几乎肯定更好):

function f(img_deformed, img)
s = size(img)[1]
b = 0
for i in range(1,s,step=1)
for j in range(1,s,step=1)
if img_deformed[i,j] == img[i,j]
b += 1
end
end
end
return b
end

一些小的样式点:s = size(img)[1] 等同于 s = size(img, 1)range( 1, s, step=1) 等同于1:s,所以你的代码可以写得更简单一些

function f(img_deformed, img)
s = size(img, 1)
b = 0
r = 1:s
for i in r
for j in r
if img_deformed[i,j] == img[i,j]
b += 1
end
end
end
return b
end

但是,这并没有解决原始代码中的潜在错误:除非您知道 img 将始终是一个方阵,使用相同的范围 (1:s) 对于两个 for 循环不保证是正确的。为避免此问题,您可以使用 axes :

function f(img_deformed, img)
b = 0
for j in axes(img, 2)
for i in axes(img, 1)
if img_deformed[i,j] == img[i,j]
b += 1
end
end
end
return b
end

请注意,我选择先循环遍历列;这在 Julia 中是一个很好的做法,因为数组是以列优先顺序存储的(请参阅手册中的解释 here)。

另请注意,使用 img 来控制我们循环遍历的值隐式假定 size(img) == size(img_deformed)。在不知道更多关于此函数的用途的情况下,很难建议如何处理它,但如果您可以假设这两个矩阵应该具有相同的大小,您可以在f() 的顶部,例如

function f(img_deformed, img)
@assert size(img) == size(img_deformed)
# rest of code is the same
end

关于在 Julia 中追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72279558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com