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
>>
>

Reply via email to