强制数组中的条目为 julia 中的整数

Posted

技术标签:

【中文标题】强制数组中的条目为 julia 中的整数【英文标题】:Force an entry in an array to be an integer in julia 【发布时间】:2022-01-21 07:02:08 【问题描述】:

在下面的 julia 代码中,a_b 的第一个条目将在 for 循环中更新。但是,我希望它始终保持为整数,无论​​它更新为什么,因为当我执行代码的最后一行时,我收到错误:“错误:LoadError:ArgumentError:无效索引:Float64 类型的 7.0”目前写在下面(7.0 是因为最终我们最终将 a_b[1] 分配给的 j 确实是 7.0)。

如何做到这一点?有没有一种方法可以预设数组中条目的类型,类似于在 julia 中定义字典时如何设置类型?

        a_b = [0, 1.0]  
        for j in 1 : 7     
            if T_w[j] > a_w_comma_T_w[2] && T_w[j] < a_b[2]     
                a_b[1] = j  
                a_b[2] = T_w[j]
            end
        end
        println("This is a_b: ", a_b)

        T_prime = copy(T_w)   
        T_prime[a_b[1]] = a_w_comma_T_w[2] 

我认为问题在于数组中的第二个条目是浮点数(我想保留它),因此它使整个数组成为浮点数。但是,我仍然不确定如何解决它。

【问题讨论】:

使用TupleInt, Float64 可以添加T_wa_w_comma_T_w的代码吗? 【参考方案1】:

要让每个元素都有一个单独的类型但也是可变的,你需要一个数组以外的东西。不过,我的头脑中没有任何东西是由整数索引的。我通常会选择可变结构(由字段访问)或我保持独立类型稳定的单独变量。

可以a_b = UnionInt, Float64[0, 1.0],不过。每个元素都可以是 Int 或 Float64,而不是仅转换为 Float64。并且由于 Union 很小,Union-splitting 优化导致的性能损失很小。

【讨论】:

【参考方案2】:

您可以在使用T[] 语法定义Vector 时缩小元素类型,例如:

julia> a_b = Int[0, 1.0]
2-element VectorInt64:
 0
 1

现在您有一个 VectorInts 并且对其进行变异将保留 Int 值:

julia> a_b[1] = 77.0
77.0

julia> a_b
2-element VectorInt64:
 77
  1

当然,舍入不会自动发生:

julia> a_b[1] = 77.1
ERROR: InexactError: Int64(77.1)

【讨论】:

他们指定他们希望将第二个元素保留为浮点数。不为此使用结构或单独的变量是一个奇怪的选择,但鉴于这种选择,BatWannaBe 的联合建议似乎是 OP 正在寻找的。​​span> 他使用1.0 并谈论7.0,所以我不确定:) 正如前面所建议的,TupleInt, Float64 可能是最明显的选择,或者struct 也可以。 OP 的代码似乎要求像 MutableTupleInt, Float 这样的东西,但找不到类似的东西。我猜当他说“j...确实是 7.0”时,OP 正在考虑数学值 7=7.0 而不是想要 j 或 a_b[1] 作为 Float64。 a struct 在这种情况下:)

以上是关于强制数组中的条目为 julia 中的整数的主要内容,如果未能解决你的问题,请参考以下文章

替换/删除数组中的空条目

C#二维数组验证表单中的条目

指定 NSDictionary 条目的值类型

numpy.array 中的零条目是不是占用内存?

Swift:如何避免 CoreData 中的重复条目以使用 JSON 数组实现?

Julia:找到所有最大值的索引