强制数组中的条目为 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_w
和a_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
现在您有一个 Vector
或 Int
s 并且对其进行变异将保留 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 中的整数的主要内容,如果未能解决你的问题,请参考以下文章