Julia中的重叠数组 - 带指针的解决方案?

时间:2015-09-05 19:37:04

标签: pointers julia

我有一个大的Float64数组x,并且在更改该切片之前经常将其切片视为矩阵。我可以以某种方式将此切片称为已经具有正确形状的y。到

x=zeros(10000)
y=x[10:18]
reshape!(y,(3,3))
y=y+eye(3) # this doesn't change x

这不起作用,因为x[10:18]会创建副本。我看了pointer_to_array,但我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

我猜以下会做这个工作:

y = pointer_to_array( pointer( x, 10 ), (3,3) )   # make a slice starting from the 10th element

这可以测试,例如,

x = zeros( 8 )
p = pointer_to_array( pointer( x, 3 ), (3,2) )
p[:,1] = 100.0
p[:,2] = 200.0
@show x    # => [ 0.0, 0.0, 100.0, 100.0, 100.0, 200.0, 200.0, 200.0 ]

如果x的大小是切片大小的倍数,则reshape()也可以直接用于修改切片。例如,

x = [ i for i=1:8 ]
s = reshape( x, (2,2,2) )
s[:,:,2] = 1000
@show x      # => [1,2,3,4,1000,1000,1000,1000]