Julia 什么是;argmax().I";茱莉亚是什么意思
下面是一个很好的例子(请查找以下内容) 它演示了如何平滑星空 我的问题是关于Julia 什么是;argmax().I";茱莉亚是什么意思,julia,Julia,下面是一个很好的例子(请查找以下内容) 它演示了如何平滑星空 我的问题是关于argmax().I。根据作者的说法,“注意在每个argmax的末尾使用尾随“.I”,它提取了主列中的坐标值。” 这是什么意思?还有其他参数吗?我在文件中找不到任何描述 根据作者的说法,它似乎是按列最大值的位置,但当我尝试argmax(gImg,dims=2)时,结果是不同的 #julia> yOriginal, xOriginal = argmax(gImg).I #(192, 168) #julia>
argmax().I
。根据作者的说法,“注意在每个argmax的末尾使用尾随“.I”,它提取了主列中的坐标值。”
这是什么意思?还有其他参数吗?我在文件中找不到任何描述
根据作者的说法,它似乎是按列最大值的位置,但当我尝试argmax(gImg,dims=2)
时,结果是不同的
#julia> yOriginal, xOriginal = argmax(gImg).I
#(192, 168)
#julia> yy, xx = argmax(gImg, dims = 2)
#400×1 Matrix{CartesianIndex{2}}:
# CartesianIndex(1, 187)
# CartesianIndex(2, 229)
⋮
# CartesianIndex(399, 207)
# CartesianIndex(400, 285)
#julia> yy, xx
#(CartesianIndex(1, 187), CartesianIndex(2, 229))
请告知
using Plots, Images; pyplot()
img = load("stars.png")
gImg = red.(img)*0.299 + green.(img)*0.587 + blue.(img)*0.114
rows, cols = size(img)
println("Highest intensity pixel: ", findmax(gImg))
function boxBlur(image,x,y,d)
if x<=d || y<=d || x>=cols-d || y>=rows-d
return image[x,y]
else
total = 0.0
for xi = x-d:x+d
for yi = y-d:y+d
total += image[xi,yi]
end
end
return total/((2d+1)^2)
end
end
blurImg = [boxBlur(gImg,x,y,5) for x in 1:cols, y in 1:rows]
yOriginal, xOriginal = argmax(gImg).I
yBoxBlur, xBoxBlur = argmax(blurImg).I
p1 = heatmap(gImg, c=:Greys, yflip=true)
p1 = scatter!((xOriginal, yOriginal), ms=60, ma=0, msw=4, msc=:red)
p2 = heatmap(blurImg, c=:Greys, yflip=true)
p2 = scatter!((xBoxBlur, yBoxBlur), ms=60, ma=0, msw=4, msc=:red)
plot(p1, p2, size=(800, 400), ratio=:equal, xlims=(0,cols), ylims=(0,rows),
colorbar_entry=false, border=:none, legend=:none)
使用绘图、图像;pyplot()
img=加载(“stars.png”)
gImg=红色。(img)*0.299+绿色。(img)*0.587+蓝色。(img)*0.114
行,列=大小(img)
println(“最高强度像素:”,findmax(gImg))
函数框模糊(图像,x,y,d)
如果x=行-d
返回图像[x,y]
其他的
总计=0.0
对于席=X-d:x+d
对于yi=y-d:y+d
总计+=图像[xi,yi]
结束
结束
返回总数/((2d+1)^2)
结束
结束
blurImg=[boxBlur(gImg,x,y,5)表示1:cols中的x,1:rows中的y]
yOriginal,xOriginal=argmax(gImg).I
yBoxBlur,xBoxBlur=argmax(blulimg).I
p1=热图(gImg,c=:灰色,yflip=true)
p1=分散!((原始,原始),ms=60,ma=0,msw=4,msc=:红色)
p2=热图(模糊,c=:灰色,yflip=true)
p2=分散!((xBoxBlur,yBoxBlur),ms=60,ma=0,msw=4,msc=:红色)
绘图(p1,p2,大小=(800400),比率=:相等,xlims=(0,cols),ylims=(0,行),
colorbar_条目=false,边框=:无,图例=:无)
I
是类型为CartesianIndex
的对象中的一个字段,当其参数超过1维时,argmax
返回该字段
如果有疑问,请始终尝试使用dump
请考虑下面的代码:
julia> arr = rand(4,4)
4×4 Matrix{Float64}:
0.971271 0.0350186 0.20805 0.284678
0.348161 0.19649 0.30343 0.291894
0.385583 0.990593 0.216894 0.814146
0.283823 0.750008 0.266643 0.473104
julia> el = argmax(arr)
CartesianIndex(3, 2)
julia> dump(el)
CartesianIndex{2}
I: Tuple{Int64, Int64}
1: Int64 3
2: Int64 2
然而,通过对象的内部结构获取CartesianIndex
对象数据并不是很优雅。朱利安的好方法是使用适当的方法:
julia> Tuple(el)
(3, 2)
或者直接访问索引:
julia> el[1], el[2]
(3, 2)
我不太熟悉元组类型。根据定义,它是一个“有序且不可变”的序列。对我来说,元组是原始序列的有序版本。不仅如此,它还提供了位置标记,例如,argmax()中哪一个是最大值。伟大的我想我有更好的图片,谢谢你的“垃圾”提示,非常感谢。