【问题标题】:How to access elements of 1-D array through some other 1-D array?如何通过其他一维数组访问一维数组的元素?
【发布时间】:2018-09-08 19:57:53
【问题描述】:

我对 Julia 很陌生,甚至对编程也很陌生。因此,请原谅我的简单疑问。

考虑下面的 Matlab 示例:

A=[10; 20; 30; 40; 50];
B=[1; 3; 5];

A(B)=0在matlab中的结果应该是[0.0 20 0.0 40 0.0]

我如何在 Julia 中实现相同的一维数组??

我有一个变量AB

julia> A
5×1 Array{Int64,2}:
 10
 20
 30
 40
 50

julia> B
2-element Array{Int64,1}:
 1
 3
 5

当我执行这个A[[B]]

ERROR: ArgumentError: invalid index: Array{Int64,1}[[1, 2]]

但是,此语句提供了以下结果:

julia> A[[1, 3 ,5]]
3-element Array{Int64,1}:
 5
 3
 1

请指导我。我知道 Julia 有平面数组,但是如何通过任何其他平面数组访问它们。

【问题讨论】:

  • 嗨 Nit_GUP,我不太清楚你真正想要做什么。关于您的错误,这只是A[[1, 3, 5]](工作正常)和A[[[1, 3, 5]]](错误,因为向量向量不是正确的索引向量)之间的区别。
  • 您好 Crstnbr,感谢您给我写信。我希望在 Julia 中得到 Matlab 语句的结果:A(B)=0。如果我执行这条语句:A[B]=0,在 Julia 中,结果为 0;而在 matlab 中,结果是 [0.0 20 0.0 40 0.0]。

标签: arrays julia flat


【解决方案1】:

你有一对额外的括号。

A[B]
A[ [1; 3; 5] ]
A[ [1, 3, 5] ]
A[ [1 3 5] ]
A[ 1:2:5 ]

所有工作都按需要进行。您可以使用任何有效索引或任何索引集合来索引数组。

但是,A[[B]] 尝试在位置 [1;3;5] 处索引 A,这是一个错误。

【讨论】:

    【解决方案2】:

    您可以通过在B 给出的索引处用零覆盖A 的元素来获得所需的结果,如下所示:

    julia> A=[10; 20; 30; 40; 50];
    
    julia> B=[1; 3; 5];
    
    julia> A[B] .= 0;
    
    julia> A
    5-element Array{Int64,1}:
      0
     20
      0
     40
      0
    

    这里,点赋值.=表示就地改变A的元素。

    【讨论】:

    • 好的。这是我不知道的非常基本的事情。如果我可以问你,有没有什么好的阅读资源可以让我开始学习这些细微差别?感谢您在这方面的帮助。非常感谢。
    • 一般来说,Julia 文档相当容易阅读。例如,看看herehere。我也推荐this blog post
    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 2021-10-08
    • 2011-10-24
    • 2023-03-29
    • 2019-01-15
    • 2020-01-15
    • 2012-12-20
    相关资源
    最近更新 更多