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

Найти произведение ненулевых диагональных элементов матрицы (Паскаль -> Питон)

29.12.2014, 22:59. Показов 17319. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С наступающим Новым Годом, уважаемые форумчане! Помогите, пожалуйста, перевести с Паскаля на Питон
Вот задача:
Написать программу, которая квадратной матрице (10х10) находит произведение ненулевых диагональных элементов.
Моё решение на Паскале:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program abc;
var
a: array of longint;
i, j: byte;
mult: longint;
begin
randomize;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
a := random(5);
write(a:4);
end;
writeln;
end;
mult := 1;
for i:=1 to 10 do
if a <> 0 then
mult := mult * a;
for i:=1 to 10 do
if (a <> 0) and (i <> 10-i+1) then
mult := mult * a;
writeln(mult);
readln;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2014, 22:59
Ответы с готовыми решениями:

В матрице найти произведение ненулевых диагональных элементов
В матрице А (7;7) найти произведение ненулевых диагональных элементов , максимальный элемент третьего столбца и минимальный элемент шестой...

В квадратной матрице (10х10) найти произведение ненулевых диагональных элементов
Написать программу, которая квадратной матрице (10х10) находит произведение ненулевых диагональных элементов.

Массив: Найти произведение ненулевых диагональных элементов (главной и побочной).
Заданная квадратная матрица, состоящая из nхn элементов. Найти произведение ненулевых диагональных элементов (главной и побочной)....

18
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 08:15
Поскольку в питоне работа с числами без numpy - это мазохизм, то вот:
Python
1
2
3
4
5
import numpy as np
# get matrix, named A
diag = A.diagonal()
diag_no_0 = diag[diag != 0]
mult = np.multiply.reduce(diag_no_0)
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 12:09
Цитата Сообщение от dondublon Посмотреть сообщение
Поскольку в питоне работа с числами без numpy - это мазохизм, то вот:
Python
1
2
3
4
5
import numpy as np
# get matrix, named A
diag = A.diagonal()
diag_no_0 = diag[diag != 0]
mult = np.multiply.reduce(diag_no_0)
что то не пойму где вторая диагональ?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 12:19
Про вторую разговора не было.
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 12:26
ну тогда ладно, я люблю доколупаться

мой гівнокодэ:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
matr = [[1,2,3,4,5,6,7,8,9,0],
        [1,0,3,4,5,6,7,8,9,1],
        [1,2,3,4,5,6,7,8,9,2],
        [1,2,3,0,5,6,0,8,9,3],
        [1,2,3,4,5,0,7,8,9,4],
        [1,2,3,4,0,6,7,8,9,5],
        [1,2,3,4,5,6,7,8,9,6],
        [1,2,3,4,5,6,7,0,9,7],
        [1,0,3,4,5,6,7,8,9,8],
        [1,2,3,4,5,6,7,8,9,9]]
 
print reduce(lambda res, x: res*x, [el[i] for i, el in enumerate(matr) if el[i] > 0], 1)
print reduce(lambda res, x: res*x, [el[i] for i, el in enumerate(matr[::-1])  if el[i] > 0], 1)
 
>>51030
864
тут учитываю только все что больше 0, не проблема !=
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 12:31
Побочную диагональ через numpy можно взять так:
Python
1
А.flat()[n-1:n*n-1:n-1]
Где n - размерность матрицы. Может быть, для скорости, если приспичит, можно использовать страйды.
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 12:42
зачем так извращатся?)
numpy это худший инструмент для работы с массивами который я встречал за столь короткую практику программирования на пийтон
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 12:51
warrax, интересное заявление. Обоснуй, плиз.
Или лучше списками?

Да, кстати, самый быстрый, ПММ, способ взять побочную диагональ:
Python
1
2
3
from numpy.lib.stride_tricks import as_strided
buf = np.frombuffer(arr, dtype=np.int32, offset=8)
as_strided(buf, shape=(n,), strides=(8, ))
Где arr - наша матрица, n - размер. Тут циферки под int32.
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 12:57
Цитата Сообщение от dondublon Посмотреть сообщение
warrax, интересное заявление. Обоснуй, плиз.
Или лучше списками?

Да, кстати, самый быстрый, ПММ, способ взять побочную диагональ:
Python
1
2
3
from numpy.lib.stride_tricks import as_strided
buf = np.frombuffer(arr, dtype=np.int32, offset=8)
as_strided(buf, shape=(n,), strides=(8, ))
Где arr - наша матрица, n - размер. Тут циферки под int32.
я не спорю, может и самый быстрый но что поймет ТС в том, что Вы написали выше и в том что я написал више?
Думаю обичные списки ему будут ближе....лично я в последнее даже вникать не хочу это бредово для меня, для того чтобы достать диагональ нет никакой надобности в изучении никому ненужной библиотеки numpy! И очень редко где придется работать с массивами (мне не приходилось нигде. Знаю большое число программистов и им не приходилось тоже или единожды на специфических проектах к которым ни джуника ни мидла не пустят наверное)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 13:03
warrax, извини, но это глупость несусветная.
Само заявление
Цитата Сообщение от warrax Посмотреть сообщение
numpy это худший инструмент для работы с массивами
подразумевает, что есть другие инструменты для работы с массивами, лучше.

А учитывая, что в чистом Питоне массивов нет вообще, получается глупость вдвойне.
Цитата Сообщение от warrax Посмотреть сообщение
И очень редко где придется работать с массивами (мне не приходилось нигде.
Ну, множество программистов тобой не ограничивается. То есть, ты исходишь из изначальной посылки, что работать с массивами НЕ НУЖНО. Что есть очевидный абсурд.

Работа с числами на голом Питоне зело медленная, и там, где приходится работать с большими числовыми массивами - это вообще не вариант, даже обсуждать тут нечего.
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 16:00
Цитата Сообщение от dondublon Посмотреть сообщение
и там, где приходится работать с большими числовыми массивами - это вообще не вариант, даже обсуждать тут нечего
покажите мне этого человека? =)))
нампай гмо полное! И в кодинге его нваерное юзают только в универах на лабах если конечно там до кодинга доходит.
Покажите мне кусок кода где его используют

Добавлено через 2 минуты
Цитата Сообщение от dondublon Посмотреть сообщение
То есть, ты исходишь из изначальной посылки, что работать с массивами НЕ НУЖНО. Что есть очевидный абсурд.
уже отвечал на это...полный дебилизм разбирать работу нампай если надо сделать какуюто простую операцию с массивом.

Добавлено через 1 минуту
from numpy.lib.stride_tricks import as_strided
buf = np.frombuffer(arr, dtype=np.int32, offset=8)
as_strided(buf, shape=(n,), strides=(8, ))

теперь обьясните ТС что это и как его едят...уверен на 101% процент, что новичек в пайтон пошлет такой код в 0пу

Добавлено через 1 минуту
а еще лучше было бы сделать это все в цыклах где и не программист разберется
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 16:08
Цитата Сообщение от warrax Посмотреть сообщение
покажите мне этого человека? =)))
К вашим услугам .
Цитата Сообщение от warrax Посмотреть сообщение
нампай гмо полное!
Глупости, как я уже сказал. Если ты этого не понимаешь, значит, твоё место - в бухгалтерии.
Цитата Сообщение от warrax Посмотреть сообщение
Покажите мне кусок кода где его используют
В нашем проекте, программа для формирования гидродинамических моделей. Сплошной numpy. Для хранения данных сейчас используется формат hdf5, переход на него в процессе, раньше был sqlite. И там числа хранились в blob'ах. Ибо скорость.

Цитата Сообщение от warrax Посмотреть сообщение
дебилизм разбирать работу нампай если надо сделать какуюто простую операцию с массивом.
Дебилизм - это, как я уже сказал, думать, что в "чистом" Python есть инструменты для работы с массивами. ИХ ТАМ НЕТ, если ты ещё не понял.

Спорить с глупостью бесполезно.

Добавлено через 1 минуту
Цитата Сообщение от warrax Посмотреть сообщение
а еще лучше было бы сделать это все в цыклах где и не программист разберется
Вот как раз циклы в питоне - бутылочное горлышко. Очень медленные.

Добавлено через 1 минуту
Цитата Сообщение от warrax Посмотреть сообщение
теперь обьясните ТС что это и как его едят...уверен на 101% процент, что новичек в пайтон пошлет такой код в 0пу
Согласен, это уже для продвинутых. Зато мой первый ответ - простой и понятный. И без циклов (фу-фу-фу, циклы - для лохов).
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
30.12.2014, 16:22
Цитата Сообщение от dondublon Посмотреть сообщение
К вашим услугам .

Глупости, как я уже сказал. Если ты этого не понимаешь, значит, твоё место - в бухгалтерии.

В нашем проекте, программа для формирования гидродинамических моделей. Сплошной numpy. Для хранения данных сейчас используется формат hdf5, переход на него в процессе, раньше был sqlite. И там числа хранились в blob'ах. Ибо скорость.


Дебилизм - это, как я уже сказал, думать, что в "чистом" Python есть инструменты для работы с массивами. ИХ ТАМ НЕТ, если ты ещё не понял.

Спорить с глупостью бесполезно.

Добавлено через 1 минуту

Вот как раз циклы в питоне - бутылочное горлышко. Очень медленные.

Добавлено через 1 минуту

Согласен, это уже для продвинутых. Зато мой первый ответ - простой и понятный. И без циклов (фу-фу-фу, циклы - для лохов).
буду лохом! буду писать циклы!)
буду лохом и не буду юзать ламбда выражения!
буду лохом и не буду юзать нампай для работы с мелкими массивами.
мне как то все равно описан класс для работы с массивом или это список списков, это тот же массив, но все операции по работе С ЭТИМ МАССИВОМ , А ЭТО МАССИВ, пишутся ручками.

вот вам задачка для нямПай))
[[1,1,1,0],
[3,2,1,0],
[1,3,2,9],
[1,-1,1,0]]
проверить или встречаются подряд три идущих 111 (горизонтали, вертикали, и диагонали)
интересно как нямПай справится. Это задачка для лохов, как Вы выразились
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.12.2014, 17:12
Цитата Сообщение от warrax Посмотреть сообщение
Это задачка для лохов, как Вы выразились
Это точно. Совершенно выдуманная задачка для студентов, в реальной жизни такой быть не может.
Придётся писать циклы, да.
Но!
Для оптимизации циклов в numpy есть класс vectorize. То есть, как питоновский цикл это уже выглядеть не будет.

Добавлено через 26 минут
warrax, итак, по этой задачке.
Я могу оптимизировать цикл по нахождению трёх единиц под ряд в одномерном массиве. Простой смертный, не использующий numpy, будет вынужден прогонять цикл по всему одномерному массиву, я же могу сделать так, что питоновский цикл пройдётся только по участкам с тремя одинаковыми элементами подряд, что, в общем случае, даст существенно меньше итераций:
Python
1
2
3
4
5
6
7
8
9
10
11
12
def three_ones(a):
    d1 = np.diff(a)
    d2 = np.diff(d1)
    n_d2 = np.arange(d2.size)
    zero_d2 = d2 == 0
    idx_d2 = n_d2[zero_d2]
    result = []
    for idx in idx_d2:
        if d1[idx] == d1[idx+1] == 0 and a[idx] == a[idx+1] == a[idx+2]==1:
            result.append(idx)
            
    return result
Добавлено через 17 минут
А в общем, если подумать, то можно и без питоновских циклов вообще:
Python
1
2
3
4
5
6
7
8
9
10
11
12
def three_ones(a):
    d1 = np.diff(a)
    d2 = np.diff(d1)
    n_d2 = np.arange(d2.size)
    zero_d2 = d2 == 0
    idx_d2 = n_d2[zero_d2]
    result = []
    idx_d1 = np.logical_and(d1[idx_d2]==0, d1[idx_d2+1]==0)
    idx_a = np.logical_and(a[idx_d2]==1, np.logical_and(a[idx_d2+1]==1, a[idx_d2+2]==1))
    result = n_d2[idx_d2[np.logical_and(idx_d1, idx_a)]]
            
    return result
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
02.01.2015, 11:28
lol)) ладно, у каждого свой подход, что тут спорить, если Вам удобно, пожалуйста юзайте. Видимо мой мозг отказывается воспринимать такой способ мышления. Может Вы и правы но я пожалуй откажусь от таких мудренных комбинаций.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.01.2015, 12:42
warrax, давайте жить дружно
0
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
02.01.2015, 15:01
Цитата Сообщение от dondublon Посмотреть сообщение
warrax, давайте жить дружно
я дружно живу! Просто я самый жирный троль)))) если кого то не потролю - день прожит зря
0
0 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 21
16.03.2017, 09:21
Цитата Сообщение от dondublon Посмотреть сообщение
Побочную диагональ через numpy можно взять так:
А так норм?
Python
1
np.diagonal(np.fliplr(field))
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
16.03.2017, 10:18
Omny, можно и так, да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2017, 10:18
Помогаю со студенческими работами здесь

В матрице А найти произведение ненулевых диагональных элементов, максимум 3-го столбца и минимум 6-ой строки
Помогите составить программу и если можно еще блок схему. В матрице А(7.7) найти произведение не нулевых диагональных элементов,...

Найти произведение ненулевых элементов матрицы, а также произвдение ненулевых элементов в каждой строчке
Мой массив: program P10_0; uses crt; type mas = array of integer; var A: mas; i, j: integer; begin For i:=1 to 8 do For...

Найти произведение диагональных элементов матрицы
Найти произведение всех диагональных элементов матрицы 10X10

Найти произведение ненулевых элементов матрицы
Задан массив A(N,N), заполненный целыми случайными числами из диапазона . Найти произведение ненулевых элементов Задача с экзамена...

Найти произведение ненулевых элементов матрицы
Задача: Найти произведение ненулевых элементов матрицы. program Project1; {$APPTYPE CONSOLE} uses SysUtils; type


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru