Creating a matrix?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ivan Voras

    Creating a matrix?

    Is there a nice(r) way of creating a list of uniform values? I'm currently
    using: list('0'*N), which makes a string and then chops it up into a list. I
    need it to create a NxN matrix:

    matrix =[list('0'*N) for i in range(N)]

    (elements need to be mutable afterwards, a shallow copy is bad)

    While this is short and concise, it also feels odd :)
  • Peter Maas

    #2
    Re: Creating a matrix?

    Ivan Voras wrote:[color=blue]
    > Is there a nice(r) way of creating a list of uniform values? I'm
    > currently using: list('0'*N), which makes a string and then chops it up
    > into a list. I need it to create a NxN matrix:
    >
    > matrix =[list('0'*N) for i in range(N)][/color]

    matrix = [['0']*N]*N

    Mit freundlichen Gruessen,

    Peter Maas

    --
    -------------------------------------------------------------------
    Peter Maas, M+R Infosysteme, D-52070 Aachen, Hubert-Wienen-Str. 24
    Tel +49-241-93878-0 Fax +49-241-93878-20 eMail peter.maas@mplu sr.de
    -------------------------------------------------------------------

    Comment

    • Peter Hansen

      #3
      Re: Creating a matrix?

      Peter Maas wrote:
      [color=blue]
      > Ivan Voras wrote:
      >[color=green]
      >> Is there a nice(r) way of creating a list of uniform values? I'm
      >> currently using: list('0'*N), which makes a string and then chops it
      >> up into a list. I need it to create a NxN matrix:
      >>
      > > matrix =[list('0'*N) for i in range(N)][/color]
      >
      > matrix = [['0']*N]*N[/color]

      Sorry, Peter, but that's a rookie mistake:
      [color=blue][color=green][color=darkred]
      >>> matrix = [['0'] * 4] * 4
      >>> matrix[/color][/color][/color]
      [['0', '0', '0', '0'], ['0', '0', '0', '0'], ['0', '0', '0', '0'], ['0',
      '0', '0
      ', '0']][color=blue][color=green][color=darkred]
      >>> matrix[1][2] = '1'
      >>> matrix[/color][/color][/color]
      [['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0',
      '0', '1
      ', '0']]

      Notice that each of the inner lists contains four seperate references
      to the string '0', but the outer repetition simply copies the inner
      list four times, resulting in four references to the same inner list!
      Changing any one element affects the same entry in each of the other
      three lists...

      -Peter

      Comment

      • Ivan Voras

        #4
        Re: Creating a matrix?

        Peter Maas wrote:[color=blue]
        > Ivan Voras wrote:
        >[color=green]
        >> Is there a nice(r) way of creating a list of uniform values? I'm
        >> currently using: list('0'*N), which makes a string and then chops it
        >> up into a list. I need it to create a NxN matrix:
        >>
        > > matrix =[list('0'*N) for i in range(N)][/color]
        >
        > matrix = [['0']*N]*N[/color]

        I can't believe I didn't try that one :)

        (hmm, actually, I think I tried it but the results were bad for some
        reason... oh well, thank you :) )


        Comment

        • Peter Maas

          #5
          Re: Creating a matrix?

          Peter Hansen wrote:[color=blue][color=green][color=darkred]
          > >>> matrix[1][2] = '1'
          > >>> matrix[/color][/color]
          > [['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0',
          > '0', '1
          > ', '0']]
          >
          > Notice that each of the inner lists contains four seperate references
          > to the string '0', but the outer repetition simply copies the inner
          > list four times, resulting in four references to the same inner list!
          > Changing any one element affects the same entry in each of the other
          > three lists...[/color]

          Sorry:

          matrix = [['0']*N for i in range(N)]

          Mit freundlichen Gruessen,

          Peter Maas

          --
          -------------------------------------------------------------------
          Peter Maas, M+R Infosysteme, D-52070 Aachen, Hubert-Wienen-Str. 24
          Tel +49-241-93878-0 Fax +49-241-93878-20 eMail peter.maas@mplu sr.de
          -------------------------------------------------------------------

          Comment

          • Mike C. Fletcher

            #6
            Re: Creating a matrix?

            N*N matrix of lists...

            [ [0]*N for i in range( N ) ]

            Seems clearer to me, anyway (and stores actual 0 values, not '0' in the
            result). Have fun,
            Mike

            Ivan Voras wrote:
            [color=blue]
            > Is there a nice(r) way of creating a list of uniform values? I'm
            > currently using: list('0'*N), which makes a string and then chops it
            > up into a list. I need it to create a NxN matrix:
            >
            > matrix =[list('0'*N) for i in range(N)]
            >
            > (elements need to be mutable afterwards, a shallow copy is bad)
            >
            > While this is short and concise, it also feels odd :)[/color]

            _______________ _______________ _________
            Mike C. Fletcher
            Designer, VR Plumber, Coder




            Comment

            • Josiah Carlson

              #7
              Re: Creating a matrix?

              > [ [0]*N for i in range( N ) ]

              xrange is a bit faster for large N, you don't need to create a list that
              gets destroyed.

              - Josiah

              Comment

              Working...