It could be made to work but it's generally not a good idea to delete random slices of arrays generally isn't a good idea for performance reasons. It's better to design an algorithm that doesn't need to do this.
On Tue, Feb 11, 2014 at 9:06 PM, Kevin Squire <[email protected]>wrote: > This thread has a few more details on why deleting from the middle of an > array isn't easy: > > https://groups.google.com/forum/#!topic/julia-users/B4OUYPFM5L8 > > Kevin > > > On Tuesday, February 11, 2014 4:55:02 PM UTC-8, Kevin Squire wrote: >> >> On Tue, Feb 11, 2014 at 4:45 PM, Steven G. Johnson <[email protected] >> > wrote: >> >>> On Friday, November 30, 2012 7:46:46 AM UTC-5, Stefan Karpinski wrote: >>>> >>>> To clarify [1 2 3] is a row-matrix, rather than a vector and cannot >>>> have an element excised from it. >>> >>> >>> You could delete by reshaping to a column (1d) vector, deleting, and >>> then reshaping back. Since the reshaping cheap and in-place, this is >>> reasonably efficient. >>> >> >> Unfortunately, that doesn't actually work. It used to be that Julia >> would throw an error when trying to modify the size of a vector which was >> an alias for a multidimensional array (when did that change?). Now, it >> just makes a copy: >> >> julia> A = [1 2 3] >> 1x3 Array{Int64,2}: >> 1 2 3 >> >> julia> pointer(A) >> Ptr{Int64} @0x0000000004db2550 >> >> julia> a = reshape(A, 3) >> 3-element Array{Int64,1}: >> 1 >> 2 >> 3 >> >> julia> pointer(a) >> Ptr{Int64} @0x0000000004db2550 >> >> julia> deleteat!(a, 2) >> 2-element Array{Int64,1}: >> 1 >> 3 >> >> julia> pointer(a) >> Ptr{Int64} @0x000000000396ebd8 >> >> julia> a = rand(3) >> 3-element Array{Float64,1}: >> 0.91121 >> 0.274773 >> 0.248093 >> >> julia> pointer(a) >> Ptr{Float64} @0x0000000011df0a60 >> >> julia> deleteat!(a, 2) >> 2-element Array{Float64,1}: >> 0.91121 >> 0.248093 >> >> julia> pointer(a) >> Ptr{Float64} @0x0000000011df0a60 >> >> Cheers, >> Kevin >> >
