Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 19.07.2014
Сообщений: 11

Умножение разреженная матрица

19.07.2014, 04:32. Показов 3729. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня проблема в модуле в котором производится функцией dot умножение матрицы эта функция не поддерживает разреженные матрицы(так мне кажется). Я глубокий чайник и при этом пенсионер так что случай тяжелый. Вот модуль которого надо заставить заработать
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
__author__ = 'kardashevskiy'
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
а вот программа которая использует этот модуль
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
__author__ = 'kardashevskiy'
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()
Помогите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.07.2014, 04:32
Ответы с готовыми решениями:

Разреженная матрица
Нужно написать вывод, добавление и удаление елементов разреженной матрицы, используя динамические структуры данных. Буду признателен хотя...

Разреженная матрица
Help! Вот задание: Разработать : 1.Процедуру P1записи ненулевых элементов разреженных матриц целых чисел (матриц с большим числом...

разреженная матрица
Помогите, пожалуйста, с задачей:Дана разряженная матрицы общего вида. Осуществить циклический сдвиг в матрице каждого столбца на n...

6
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
20.07.2014, 00:49
urung, а что пишит? Какая ошибка?
0
0 / 0 / 0
Регистрация: 19.07.2014
Сообщений: 11
21.07.2014, 03:02  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
/usr/bin/python /home/kardashevskiy/PycharmProjects/tests/qwe1.py
Traceback (most recent call last):
  File "/home/kardashevskiy/PycharmProjects/tests/qwe1.py", line 47, 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
Добавлено через 3 минуты
Спасибо что обратили внимание извините за задержку ответа у меня часовой пояс +6
0
0 / 0 / 0
Регистрация: 19.07.2014
Сообщений: 11
22.07.2014, 10:10  [ТС]
Я боюсь что у вас не хватит терпения дочитать до конца но все таки рискну: Дело в том что эта программа qwe1прекрасно работает с библиотечным модулем linalg.cg и этот модуль sg1 в другой тестовой программе также работает более того оба модуля sg1 и linalg.cg одинаково хорошо вычисляют в той другой тестовой программе. Я же хочу эту задачу решать применяя другие модули которые конечно же похожи на этот модуль. Я приведу ту правильную которая работает. Может быть это поможет. Я не думал что это так трудно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
__author__ = 'kardashevskiy'
#Hyperbolic equation
import numpy as np
from scipy import sparse
from scipy.sparse import linalg
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 = linalg.cg(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()
0
22.07.2014, 10:12

Не по теме:

urung, это возможно и не трудно, просто времени пока не хватает

0
0 / 0 / 0
Регистрация: 19.07.2014
Сообщений: 11
24.07.2014, 03:39  [ТС]
Может посоветуете как найти исходный код того самого библиотечного модуля linalg.cg который я не сумел найти
0
0 / 0 / 0
Регистрация: 19.07.2014
Сообщений: 11
01.08.2014, 04:50  [ТС]
Мне помогли на другом форуме на исходниках оказывается на 47 строке конвертируем матрицу обратно в простую то есть надо не В=А.tocsr() а В=А.toarray() и все. Спасибо всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2014, 04:50
Помогаю со студенческими работами здесь

Разреженная матрица
Добрый вечер. Из-за белезни, пролежал 2 недели дома, поэтому пропустил лекции по этой теме, а лабу надо сдавать. Так вот, задача: ...

Разреженная матрица
Можете написать алгоритм перехода с разреженной матрицы в обычную?

Разреженная матрица
Здравствуйте, опять обращаюсь к Вам с просьбой о помощи. У меня есть задание сжать матрицу и потом выполнить над ней задание, а именно...

Разреженная матрица
Разреженная матрица. Добавление (вычитание), произведение матриц, умножение матрицы на константу, транспонирование. Помогите пожалуйста!...

Разреженная матрица
Добрый день. Есть квадратная матрица, после считывания представляется в разреженном строчном формате. где AN-ненулевой элемент,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru