我有一个大的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
,但我无法解决这个问题。
答案 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]