Thanks. I see that is not easy to change dense matrix. The real problema is 
more complex. I'm using JuMP matrixial operators, I think this only work 
with matrix but actually I didn't test with arrays.
So I have a matrix with 3 dimensions and want to delete some items of this 
matrix. I tried a lot of things but couldn't change a 3D matrix. I couldn't 
also find how to create 3D sparse matrix. Any suggestions for my this case?

On Thursday, October 22, 2015 at 7:21:07 AM UTC-2, Kristoffer Carlsson 
wrote:
>
> There is no way to delete columns here and there and in general end up 
> with a valid dense matrix. 
>
> If you want a view on some of the columns of the matrix you can use slice.
>
> julia> x = reshape(1:100, (10,10));
>
> julia> slice(x, :, 1:3:10)
> 10x4 SubArray{Int64,2,Array{Int64,2},Tuple{Colon,StepRange{Int64,Int64}},1
> }:
>   1  31  61   91
>   2  32  62   92
>   3  33  63   93
>   4  34  64   94
>   5  35  65   95
>   6  36  66   96
>   7  37  67   97
>   8  38  68   98
>   9  39  69   99
>  10  40  70  100
>
> If you want a new "first order" matrix then I don't think you will get 
> something better than
>
> x = x[:, 1:3:10]
>
> What's your use case?
>
> On Thursday, October 22, 2015 at 10:48:21 AM UTC+2, Glen O wrote:
>>
>> The reason why it's not working is that you're re-assigning x, rather 
>> than editing it. By running "x=x[....]", you're creating a copy of x with 
>> the appropriate column removed, and then assigning x to point to the copy, 
>> rather than to the original array.
>>
>> If you wanted to edit an array's values, you'd do something like 
>> "x[:]=x[end:-1:1]" to reverse them in-place - this creates a reversed copy, 
>> and then copies the values from that reversed copy into the original array. 
>> Unfortunately, for removing columns or values, it's not quite so simple, 
>> because you have to deal with changing the size of the matrix.
>>
>> To get a feel for what is involved, have a look at this:
>>
>> https://github.com/JuliaLang/julia/blob/master/base/array.jl
>>
>> That file has the definitions of the functions that you're trying to 
>> mimic. As you'll see, they end up using "ccall" functions, which are used 
>> to call C and Fortran libraries. I believe these are necessary if you wish 
>> to alter the dimensions of an array in-place.
>>
>> On Thursday, 22 October 2015 09:55:55 UTC+10, Thuener Silva wrote:
>>>
>>> I want to change a matrix inside a function. Example( just to 
>>> illustrate):
>>>
>>> julia> x = ones(2,3)
>>> 2x3 Array{Float64,2}:
>>>  1.0  1.0  1.0
>>>  1.0  1.0  1.0
>>>
>>> julia> function deletecolumns(x,i)
>>>           x = x[:,1:size(x,2) .!= i]
>>>        end
>>> deletecolumns (generic function with 1 method)
>>>
>>> julia> deletecolumns(x,1)
>>> 2x2 Array{Float64,2}:
>>>  1.0  1.0
>>>  1.0  1.0                                                               
>>>                                                               
>>>                                                                         
>>>                                                               
>>> julia> x
>>> 2x3 Array{Float64,2}:                                                   
>>>                                                               
>>>  1.0  1.0  1.0                                                           
>>>                                                              
>>>  1.0  1.0  1.0  
>>>
>>> The best way is to do "x = deletecolumns(x,1)" ? I want to make 
>>> something more like delete!(x,1).
>>>
>>>
>>> Thanks in advance,
>>> Thuener Silva
>>>
>>

Reply via email to