На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Модераторы: RaD
  
    > Программа
      Доброго времени суток.Нужно написать программу, которая преобразовывает последовательности чисел вида 1,2,3,4.. к такой записи: 1-4, 7-8. Нужно использовать split. Как это реализовать через split?
        Это Python?

        list(map(int, s.split(','))) даст тебе список чисел в строке
        А дальше ищешь монотонные последовательности вида n, n+1, n+2 (анализируя разности соседних чисел, новая последовательность начинается там, где эта разность не равна 1) и формируешь выходную строку.
        n -> 'n'
        n, m -> 'n,m'
        n, ..., m -> 'n-m'

        Я предпочитаю list(map(int, s.replace(',',' ').split())), так можно после запятых пробелы вставлять.
          Помогите с программой
          Сообщение отредактировано: Urung -
            Помогите пожалуйста знатоки.. Надо сделать так чтобы модуль sg1 заработал. выдает вот такую ошибку
            /usr/bin/python /home/kardashevskiy/PycharmProjects/tests/qwe1.py
            Traceback (most recent call last):
            File "/home/kardashevskiy/PycharmProjects/tests/qwe1.py", line 51, in <module>
            v, info = sg1(B, b,tol=1.e-08)
            File "/home/kardashevskiy/PycharmProjects/tests/sg1.py", line 13, in sg1
            r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
            File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 193, in __sub__
            raise NotImplementedError('adding a scalar to a sparse '
            NotImplementedError: adding a scalar to a sparse matrix is not supported

            Process finished with exit code 1

            import numpy as np
            from scipy import sparse

            def sg1(B,b,tol=1.0e-8):
            """
            Solve the linear system Ax=b by conjugate gradient method
            """
            n=len(b)
            x=np.zeros((n),'float')
            r=np.copy(b)
            for i in range(n):
            r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
            s=np.copy®
            As=np.zeros((n),'float')
            for k in range(n):
            for i in range(n):
            As[i]=np.dot(B[i,0:n],s[0:n])
            alpha=np.dot(r,r)/np.dot(s,As)
            x=x-alpha*s
            for i in range(n):
            r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
            if np.dot(r,r)<tol**2:
            break
            else:
            beta=-np.dot(r,As)/np.dot(s,As)
            s=r+beta*s
            return x,k


            #Hyperbolic equation
            import numpy as np
            from scipy import sparse
            from scipy.sparse import linalg
            from sg1 import sg1
            import matplotlib.pyplot as plt
            from mpl_toolkits.mplot3d import Axes3D
            import time
            def f(x, y, r):
            return 2*c*(y-y**2+r*(x**2-x))
            def poisson(n, h, r):
            V = []
            I = []
            J = []
            b = []
            for j in range(n):
            for i in range(n):
            k = i+n*j
            b.append(h**2*f(i*h+h, j*h+h, r))
            V.append(2.-2*r)
            I.append(k)
            J.append(k)
            if i>0:
            V.append(-1.)
            I.append(k)
            J.append(k-1)
            if i<n-1:
            V.append(-1.)
            I.append(k)
            J.append(k+1)
            if j>0:
            V.append®
            I.append(k)
            J.append(k-n)
            if j<n-1:
            V.append®
            I.append(k)
            J.append(k+n)
            # return ((V, (I,J))), b
            return sparse.coo_matrix((V, (I,J))), b
            # return()
            N =100
            h = 1./N
            c = 4.
            r = 0.4
            tst = time.clock()
            A, b = poisson(N-1, h, r)
            B = A.tocsr()
            v, info = sg1(B, b,tol=1.e-08)
            dt = time.clock() - tst

            if iter == 0:
            print "N = %i, time solution = %1.3e" % (N, dt)

            fig = plt.figure()
            ax = Axes3D(fig)
            x = np.linspace(h/2, 1.-h/2, N-1)
            y = np.linspace(h/2, 1.-h/2, N-1)
            X,Y = np.meshgrid(x, y)
            Z = np.reshape(v, (N-1, N-1))
            ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='spectral')
            plt.show()


            #x = np.linspace(h/2, 1.-h/2, N-1)
              Urung, и кто будет с отступами разбираться?
                Мне больше трейдмарки в коде доставляют :D
                  Это автозамена работает. Ещё один повод заключать код в тэги, помимо сохранения отступов и подсветки.
                    Помогите запустить
                    ExpandedWrap disabled
                      import numpy as np
                      from scipy import sparse
                      from scipy.sparse import linalg
                      from sg1 import sg1
                      import matplotlib.pyplot as plt
                      from mpl_toolkits.mplot3d import Axes3D
                      import time
                      def f(x, y, r):
                          return 2*c*(y-y**2+r*(x**2-x))
                      def poisson(n, h, r):
                          V = []
                          I = []
                          J = []
                          b = []
                          for j in range(n):
                              for i in range(n):
                                  k = i+n*j
                                  b.append(h**2*f(i*h+h, j*h+h, r))
                                  V.append(2.-2*r)
                                  I.append(k)
                                  J.append(k)
                                  if i>0:
                                      V.append(-1.)
                                      I.append(k)
                                      J.append(k-1)
                                  if i<n-1:
                                      V.append(-1.)
                                      I.append(k)
                                      J.append(k+1)
                                  if j>0:
                                      V.append(r)
                                      I.append(k)
                                      J.append(k-n)
                                  if j<n-1:
                                      V.append(r)
                                      I.append(k)
                                      J.append(k+n)
                          return sparse.coo_matrix((V, (I,J))), b
                      N =100
                      h = 1./N
                      c = 4.
                      r = 0.4
                      tst = time.clock()
                      A, b = poisson(N-1, h, r)
                      B = A.tocsr()
                      v, info = sg1(B, b,tol=1.e-08)
                      dt = time.clock() - tst
                       
                      if iter == 0:
                          print "N = %i, time solution = %1.3e" % (N, dt)
                       
                      fig = plt.figure()
                      ax = Axes3D(fig)
                      x = np.linspace(h/2, 1.-h/2, N-1)
                      y = np.linspace(h/2, 1.-h/2, N-1)
                      X,Y = np.meshgrid(x, y)
                      Z = np.reshape(v, (N-1, N-1))
                      ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='spectral')
                      plt.show()

                    А вот модуль sg1 который не работает
                    ExpandedWrap disabled
                      import numpy as np
                      from scipy import sparse
                       
                      def sg1(B,b,tol=1.0e-8):
                          """
                          Solve the linear system Ax=b by conjugate gradient method
                          """
                          n=len(b)
                          x=np.zeros((n),'float')
                          r=np.copy(b)
                          for i in range(n):
                              r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
                          s=np.copy(r)
                          As=np.zeros((n),'float')
                          for k in range(n):
                              for i in range(n):
                                  As[i]=np.dot(B[i,0:n],s[0:n])
                              alpha=np.dot(r,r)/np.dot(s,As)
                              x=x-alpha*s
                              for i in range(n):
                                  r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
                              if np.dot(r,r)<tol**2:
                                  break
                              else:
                                  beta=-np.dot(r,As)/np.dot(s,As)
                                  s=r+beta*s
                          return x,k
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0230 ]   [ 15 queries used ]   [ Generated: 12.05.24, 13:40 GMT ]