Найти - Пользователи
Полная версия: генерация единичной матрицы
Начало » Python для новичков » генерация единичной матрицы
1 2 3 4
Areostar
Как мне спомощью генератора создать единичную матрицу? тоесто квадратную матрицу n = m
где все элементы составляющие главную диаганаль(тоесть а аресами 0,0 1,1 2,2 и т.д) равны единице. Остальные элементы навны нулю.

Нулевую матрицу(тоесть где все нули) генерирую так:
  for i in range(_n):
            self.matrix.append([0] * _m)

А единичную как?
rami
 self.matrix = [[0 if i-j else 1 for j in range(n)] for i in range(n)]
Rodegast
 >>> 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]]
Areostar
Спасибо! первый вариант куда изяшнее! я спрашивал именно генератор
FishHook
Areostar
Спасибо! первый вариант куда изяшнее! я спрашивал именно генератор
так там нет генератора
AD0DE412
rami
 self.matrix = [[0 if i-j else 1 for j in range(n)] for i in range(n)]
интересно while как то можно использовать в генераторах списков?
зы я имею в виду за место if
FishHook
AD0DE412
while
AD0DE412
за место if
???
Каким образом вы хотите заменить if на while? Покажите пример, как вы это видите.
AD0DE412
ну что то такое
 j = 0
[(цикл_с_условием while i < 10 or j < 10 если_верно_что_то_ делает_с j) for i in iter]
не знаю зачем такое, просто подумалось … while это же цикл с уловием (как и for конечно, ну там - пока есть порох в поро…)
зы в интернетах чего то подобного нет, скорее всего эт так не работает и/или не нужно (мною все еще э ммм э не обдумано че да как и зачем)
FishHook
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)
как вы выдите, это различные комбинации анонимной функции и счетчика в её замыкании
во что должна транслироваться ваша конструкция решительно неясно.
AD0DE412
по хорошему вопрос должен звучать - почему 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 бесконечности!



This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB