Vector of vector re-size
Vector of vector re-size
So I have two vector of vectors like:
matchings_vec = VectorVectorVectorVectorAny(num_tilt1)
Minfoall_vec = VectorVectorVectorVectorVectorVectorFloat64(num_tilt1)
I defined it as:
matchings_vec = [VectorAny() for i in 1:num_tilt1]
Minfoall_vec = [VectorFloat64() for i in 1:num_tilt1]
Then I am trying to resize the inner vectors like:
for tt = 1:num_tilt1
t_tt = t[tt] #; t1 = t_tt; t2 = 1;
if t_tt == 1
num_rot1 = 1
else
num_rot1 = round(Int, num_rot_t2 * t_tt/2)
if rem.(num_rot1, 2) == 1.0
num_rot1 += 1
end
num_rot1 /= 2
end
num_rot1 = round(Int, num_rot1)
#resize!(matchings_vec[tt], num_rot1)
matchings_vec[tt] = VectorAny(num_rot1)
#resize!(Minfoall_vec[tt], num_rot1)
Minfoall_vec[tt] = VectorFloat64(num_rot1)
for rr = 1:num_rot1
num_tilt2 = round(Int, num_tilt2)
#resize!(matchings_vec[tt][rr], num_tilt2)
matchings_vec[tt][rr] = VectorAny(num_tilt2)
#resize!(Minfoall_vec[tt][rr], num_tilt2)
Minfoall_vec[tt][rr] = VectorFloat64(num_tilt2)
for tt2 = 1:num_tilt2
t_im2 = t[tt2]
#t_im2_1 = t_im2; t_im2_2 = 1;
if t_im2 == 1
num_rot1_2 = 1
else
num_rot1_2 = round(Int, num_rot_t2 * t_im2/2)
if rem.(num_rot1_2, 2) == 1.0
num_rot1_2 += 1
end
num_rot1_2 /= 2
end
num_rot1_2 = round(Int, num_rot1_2)
#resize!(matchings_vec[tt][rr][tt2], num_rot1_2)
matchings_vec[tt][rr][tt2] = VectorAny(num_rot1_2)
#resize!(Minfoall_vec[tt][rr][tt2], num_rot1_2)
Minfoall_vec[tt][rr][tt2] = VectorFloat64(num_rot1_2)
end
end
end
I am getting this error:
MethodError: Cannot convert
an object of type ArrayFloat64,1 to an
object of type Float64 This may have arisen from a call to the
constructor Float64(...), since type constructors fall back to convert
methods.
convert
Stacktrace: [1] setindex!(::ArrayFloat64,1, ::ArrayFloat64,1,
::Int64) at ./array.jl:578 [2] macro expansion at ./In[32]:22
[inlined] [3] anonymous at ./:?
Can you suggest what I am doing wrong? Thanks!
num_tilt2
Float64
VectorAny(num_tilt2)
VectorAny(0.0)
VectorAny([0.0])
VectorAny
VectorFloat64
Hi @ColinTBowers, Sorry I edited it and getting the error above
– Isai
Aug 20 at 4:46
I think you think that
VectorAny(num_rot1)
creates a vector of length num_rot1
. It doesn't. As per my comment above, it will throw an error if num_rot1
is Int
or Float64
(this is a deliberate design choice). Just use something like zeros(Float64, num_rot1)
to initialize a VectorFloat64
of length num_rot1
. Also, I don't know why you're bothering with all the resizing. As near as I can tell, you could remove every resize!
line and still get the same outcome.– Colin T Bowers
Aug 20 at 6:02
VectorAny(num_rot1)
num_rot1
num_rot1
Int
Float64
zeros(Float64, num_rot1)
VectorFloat64
num_rot1
resize!
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
What is
num_tilt2
? It seems to just appear out of nowhere in the example code you provide. I'm guessing it is of typeFloat64
and so the error is caused byVectorAny(num_tilt2)
, because Julia doesn't automatically convert scalar types to arrays. SoVectorAny(0.0)
will cause an error, butVectorAny([0.0])
will not (although I'm not sure why you would specifically want aVectorAny
when you could have aVectorFloat64
... it isn't clear to me what you're trying to do with this code)– Colin T Bowers
Aug 20 at 4:38