Jay*_*ong 1 arrays syntax matrix julia
我想重塑函数内部的矩阵,因此我在函数外部“声明”了一个数组并reshape()在函数中使用。尽管数组是可变的,但它并没有真正起作用。
julia> my_array = 1:10
1:10
julia> function test(array)
array = reshape(array, 2, 5)
println(array)
end
test (generic function with 1 method)
julia> test(my_array)
[1 3 5 7 9; 2 4 6 8 10]
julia> println(my_array)
1:10
Run Code Online (Sandbox Code Playgroud)
函数内部,my_array已经被重塑为2*5的矩阵,但执行函数后又恢复为1:10。
我想知道这背后的原因,以及如何重塑函数内部的全局数组?
编辑:我的问题与lisp 中的变量引用不同,我知道将变量副本传递到堆栈的想法。对于这个问题,我不知道为什么特定函数reshape()不会更改数组的内容,即使我传递了可变对象的引用。
来自文档:
假设您调用这样的函数:
Run Code Online (Sandbox Code Playgroud)julia> x = 10 10 julia> function change_value!(y) y = 17 end change_value! (generic function with 1 method) julia> change_value!(x) 17 julia> x # x is unchanged! 10在 Julia 中,变量的绑定
x不能通过x作为参数传递给函数来更改。change_value!(x)在上面的例子中调用时,y是一个新创建的变量,最初绑定到 的值x,即 10;然后y反弹到常量 17,而x外部作用域的变量保持不变。
因此,您不能通过在函数内重新分配传递的值来重新分配变量。
话虽这么说,一些集合允许突变(但仍然不能重新分配):
julia> function mut(x)
x[1] = 100
end
mut (generic function with 1 method)
julia> a = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> mut(a)
100
julia> a
3-element Array{Int64,1}:
100
2
3
Run Code Online (Sandbox Code Playgroud)
如果您想更改数组本身并获得其他答案,您可以使用元组返回多个值:
julia> function dubSum(x)
x = hcat(x,x)
sum_val = sum(x)
return (x, sum_val)
end
dubSum (generic function with 1 method)
julia> x = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> x, sum_val = dubSum(x)
(
3x2 Array{Int64,2}:
1 1
2 2
3 3,
12)
julia> x
3x2 Array{Int64,2}:
1 1
2 2
3 3
julia> sum_val
12
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |