【问题标题】:How to exchange one specific value in an array in Julia?如何在 Julia 的数组中交换一个特定值?
【发布时间】:2020-02-21 17:22:56
【问题描述】:

我对 Julia 很陌生,所以这可能是一个非常简单的问题。我想创建一个向量并将给定值与新的给定值交换。

这就是它在 Java 中的工作方式,但我找不到 Julia 的解决方案。我必须先复制数组吗?我很无知..

function sorted_exchange(v::Array{Int64,1}, in::Int64, out::Int64)
    i=1
    while v[i]!=out
        i+=1
    end
    v[i]=in
    return v
end

程序运行但只返回“旧”向量。 示例:sorted_exchange([1,2,3],4,3),预期:[1,2,4],实际:[1,2,3]

【问题讨论】:

  • 你的例子为我返回[1, 2, 4]
  • 真的吗?对我来说是这样的:julia> sorted_exchange([1,2,3],4,3) 3-element Array{Int64,1}: 1 2 3
  • 对我来说也是如此,您的示例返回预期的正确答案:[1,2,4]
  • 好的,现在变得很奇怪:如果我尝试在 IDE (Atom/Juno) 中使用该方法,它不起作用,但如果我将完全相同的代码放在 shell 中,它就会起作用正好。不管怎样,谢谢
  • 它在 Juno 中也适用于我......我会问你使用的是什么 Julia 版本和操作系统,但我想不出你的示例中的任何内容会受到更改的影响Julia 版本。

标签: arrays replace julia


【解决方案1】:

你可以使用findall找到你想要替换的值:

a = [1, 2, 5]
findall(isequal(5), a) # returns 3, the index of the 5 in a

并用它来替换值

a[findall(isequal(5), a)] .= 6
a # returns [1, 2, 6]

【讨论】:

  • 做示例代码正在做的事情,使用findfirst而不是findall不是更好吗?
【解决方案2】:

有一个很好的内置函数:replace 或其就地版本:replace!

julia> v = [1,2,3];

julia> replace!(v, 3=>4);

julia> v
3-element Array{Int64,1}:
 1
 2
 4

您发布的代码似乎可以正常工作,尽管它的功能略有不同。您的代码只替换了3 的第一个实例,而replace! 替换了每个实例。如果您只想替换第一个实例,您可以编写:

julia> v = [1,2,3,5,3,5];

julia> replace!(v, 3=>4; count=1)
6-element Array{Int64,1}:
 1
 2
 4
 5
 3
 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多