Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2019 15:29:25

Areostar
Зарегистрирован: 2018-06-27
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

генерация единичной матрицы

Как мне спомощью генератора создать единичную матрицу? тоесто квадратную матрицу n = m
где все элементы составляющие главную диаганаль(тоесть а аресами 0,0 1,1 2,2 и т.д) равны единице. Остальные элементы навны нулю.

Нулевую матрицу(тоесть где все нули) генерирую так:

  for i in range(_n):
            self.matrix.append([0] * _m)

А единичную как?

Офлайн

#2 Авг. 26, 2019 16:00:31

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

генерация единичной матрицы

 self.matrix = [[0 if i-j else 1 for j in range(n)] for i in range(n)]

Офлайн

#3 Авг. 26, 2019 17:46:53

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

генерация единичной матрицы

 >>> matrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for i, x in enumerate(matrix):
...     x[i] = 1
... 
>>> matrix
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Авг. 26, 2019 20:08:29

Areostar
Зарегистрирован: 2018-06-27
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

генерация единичной матрицы

Спасибо! первый вариант куда изяшнее! я спрашивал именно генератор

Офлайн

#5 Авг. 26, 2019 22:34:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

генерация единичной матрицы

Areostar
Спасибо! первый вариант куда изяшнее! я спрашивал именно генератор
так там нет генератора



Офлайн

#6 Авг. 27, 2019 08:22:37

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

генерация единичной матрицы

rami
 self.matrix = [[0 if i-j else 1 for j in range(n)] for i in range(n)]
интересно while как то можно использовать в генераторах списков?
зы я имею в виду за место if



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 27, 2019 08:55:52)

Офлайн

#7 Авг. 27, 2019 08:59:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

генерация единичной матрицы

AD0DE412
while
AD0DE412
за место if
???
Каким образом вы хотите заменить if на while? Покажите пример, как вы это видите.



Офлайн

#8 Авг. 27, 2019 09:27:11

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

генерация единичной матрицы

ну что то такое

 j = 0
[(цикл_с_условием while i < 10 or j < 10 если_верно_что_то_ делает_с j) for i in iter]
не знаю зачем такое, просто подумалось … while это же цикл с уловием (как и for конечно, ну там - пока есть порох в поро…)
зы в интернетах чего то подобного нет, скорее всего эт так не работает и/или не нужно (мною все еще э ммм э не обдумано че да как и зачем)



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 27, 2019 11:03:06)

Офлайн

#9 Авг. 27, 2019 12:47:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

генерация единичной матрицы

AD0DE412
не знаю зачем такое, просто подумалось … while это же цикл с уловием (как и for конечно, ну там - пока есть порох в поро…)
зы в интернетах чего то подобного нет, скорее всего эт так не работает и/или не нужно (мною все еще э ммм э не обдумано че да как и зачем)
ключевое отличие for от while -это наличие счетчика. Вот такая конструкция, которую вы называете генератором (чем вводите в заблуждение)
 l = [x for x in iterable if cond]
разворачиается вот в такой map
 l = map(lambda x: x, filter(lambda i: cond,  iterable))
или вот в такой цикл
 l = []
for x in iterable:
   if cond:
       l.append(x)
как вы выдите, это различные комбинации анонимной функции и счетчика в её замыкании
во что должна транслироваться ваша конструкция решительно неясно.



Отредактировано FishHook (Авг. 27, 2019 12:50:30)

Офлайн

#10 Авг. 28, 2019 09:01:54

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

генерация единичной матрицы

по хорошему вопрос должен звучать - почему while ни как не используется в генераторах списков? (списковое включение)

FishHook
ключевое отличие for от while - это наличие счетчика
вроде как да (эээ как мне кажется, тут больше подойдут слова - сравнение элемента(элементов) c (необязательная часть) изменением элемента сравнения в цикле пока сравнение выдает True), кроме того, как оказалась, генеретор списков это просто эээ фишка такая в python, способ сокращенной записи.
FishHook
во что должна транслироваться ваша конструкция решительно неясно.
плюс добавляет в язык немного функцианального программирования(в душе не ведаю что такое)
FishHook
разворачиается вот в такой map
 l = map(lambda x: x, filter(lambda i: cond,  iterable))
спсб за ответ
зы
кста прикольная штука
 # https://habr.com/ru/post/320288/
import itertools
inf_gen = (x for x in itertools.count())  # бесконечный генератор от 0 to бесконечности!





1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 28, 2019 09:15:57)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version