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()中哪一个是最大值。伟大的我想我有更好的图片,谢谢你的“垃圾”提示,非常感谢。