EMCP  
                
                  
                    April 5, 2021,  1:40pm
                   
                  1 
               
             
            
              please forgive this very newb question.  I am attempting to run through the book “Neural Networks from Scratch with Python” … but with JuliaLang instead
I want to do the following but it’s perhaps my bias towards python getting me to print in a maybe wrong way… how do I concatenate a string with an array to print its contents nicely?
Thanks
## Ch02 - Coding our first Neurons
print("Starting Exercise")
inputs  = [1, 2, 3]
weights = [0.2, 0.3, -0.5]
bias = 2
print("inputs: " + string.(inputs))
print("weights: " + string.(weights))
print("bias: " + string.(bias))
% julia ch02_coding-first-neurons/ex01.jl
Starting ExerciseERROR: LoadError: MethodError: no method matching +(::String, ::Vector{String})
Closest candidates are:
  +(::Any, ::Any, ::Any, ::Any...) at operators.jl:560
  +(::Array, ::Array...) at arraymath.jl:43
  +(::SparseArrays.AbstractSparseMatrixCSC, ::Array) at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/SparseArrays/src/sparsematrix.jl:1744
  ...
Stacktrace:
 [1] top-level scope
 
            
              
            
           
          
            
            
              Replace + with * and everything will work.
             
            
              2 Likes 
            
            
           
          
            
              
                EMCP  
              
                  
                    April 5, 2021,  2:15pm
                   
                  3 
               
             
            
              seems to yield a different error
print("inputs: "*string.(inputs))  
% julia ch02_coding-first-neurons/ex01.jl
Starting Exercise
ERROR: LoadError: MethodError: no method matching *(::String, ::Vector{String})
Closest candidates are:
  *(::Any, ::Any, ::Any, ::Any...) at operators.jl:560
  *(::Union{AbstractChar, AbstractString}, ::Union{AbstractChar, AbstractString}...) at strings/basic.jl:260
  *(::Union{SparseArrays.AbstractSparseMatrixCSC{TA, Ti}, SubArray{TA, 2, var"#s832", Tuple{Base.Slice{Base.OneTo{Int64}}, I}, L} where {I<:AbstractUnitRange, var"#s832"<:SparseArrays.AbstractSparseMatrixCSC{TA, Ti}, L}} where Ti, ::Union{StridedVector{T} where T, BitVector}) where TA at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/SparseArrays/src/linalg.jl:50
  ...
Stacktrace:
 [1] top-level scope
   @ ~/nnfs-julialang/ch02_coding-first-neurons/ex01.jl:10
in expression starting at /nnfs-julialang/ch02_coding-first-neurons/ex01.jl:10
 
            
              
            
           
          
          
            
              
                rdeits  
              
                  
                    April 5, 2021,  2:39pm
                   
                  5 
               
             
            
              
The easiest way to do this is to skip calling string at all:
julia> inputs = [1, 2, 3]
3-element Vector{Int64}:
 1
 2
 3
julia> println("input: ", inputs)
input: [1, 2, 3]
The println function accepts multiple arguments, and it already knows how to print arrays.
Even easier, you can use the @show macro:
julia> @show inputs
inputs = [1, 2, 3]
 
            
              3 Likes 
            
            
           
          
            
              
                EMCP  
              
                  
                    April 5, 2021,  2:40pm
                   
                  6 
               
             
            
              I figured it out with the following change
## Ch02 - Coding our first Neurons
println("Starting Exercise")
inputs  = [1, 2, 3]
weights = [0.2, 0.3, -0.5]
bias = 2
print("inputs: ",string.(inputs))
Ouput:
% julia ch02_coding-first-neurons/ex01.jl
Starting Exercise
inputs: ["1", "2", "3"]%   
I guess my final question is… am I experiencing different answers based on different versions of Julia ?
I saw some references to
@printf
https://docs.julialang.org/en/v1/stdlib/Printf/ 
this suggested * didn’t work either, as mentioned earlier in my last post…
             
            
              
            
           
          
            
              
                rdeits  
              
                  
                    April 5, 2021,  2:46pm
                   
                  7 
               
             
            
              
I don’t think so–you can use * to concatenate two strings in any Julia version. What you can’t do is concatenate a string to a vector  of strings, which is what string.(inputs) produces:
julia> "hello" * "world"
"helloworld"
julia> "hello" * ["world", "world"]
ERROR: MethodError: no method matching *(::String, ::Vector{String})
 
            
              2 Likes 
            
            
           
          
            
              
                rdeits  
              
                  
                    April 5, 2021,  2:47pm
                   
                  8 
               
             
            
              
 EMCP:
 
I saw some references to
@printf
 
 
You can do that too. Printf is a package  in the standard library, so you need to load it with using or import first:
julia> using Printf
julia> @printf "inputs: %s" inputs
inputs: [1, 2, 3]
 
            
              3 Likes