Как создать подобную матрицу?
- Рандомно генерируется 3 числа: m, n, q.
- Генерируется список рандомных значений длиной n
- Генерируется матрица, в которой первая строка - сгененированный во втором пункте список, а элементы всех последующих строк равны вертикально верхнему элементу, умноженному на число q. То есть наш список является набором первых элементов столбцов, причем каждый стобец - идущая вертикально вниз геометрическая прогрессия. Мой способ:
import random
m = random.randint(3,7)
n = random.randint(3,7)
q = random.randint(3,7)
matrix = [[random.randint(0, 5) for i in range(n)] for j in range(m)]
spis = [random.randint(0,10) for x in range(n)]
print(str(spis))
print(f' *{q} ')
matrix[0] = spis
for i in range(len(matrix)):
for j in range(len((matrix[i]))):
if i == 1:
continue
elif i > 1:
matrix[i][j] = matrix[i-1][j] * q
for r in range(len(matrix)):
print(matrix[r])
У меня выводится какая-то вакханалия. Помогите пожалуйста
Ответы (3 шт):
Автор решения: MBo
→ Ссылка
row = [random.randint(0, 10) for i in range(n)]
matrix = [[row[i]*q**j for i in range(n)] for j in range(m)]
Автор решения: Сергейко
→ Ссылка
Спасибо, если кто-то начал разбираться, но я уже все сделал сам
import random
m = random.randint(3,7)
n = random.randint(3,7)
q = random.randint(3,7)
matrix = [[random.randint(0, 5) for i in range(n)] for j in range(m)]
spis = [random.randint(0,10) for x in range(n)]
print(str(spis))
print(f' *{q} ')
matrix[0] = spis
for i in range(len(matrix)):
for j in range(len((matrix[i]))):
matrix[1][j] = matrix[0][j] * q
if i == 1:
continue
matrix[1][j] = matrix[0][j] * q
elif i > 1:
matrix[i][j] = matrix[i-1][j] * q
for r in range(len(matrix)):
print(matrix[r])
Автор решения: Алексей Р
→ Ссылка
То же через numpy
import numpy as np
m, n, q = np.random.randint(3, 7, 3)
a = np.append(np.random.randint(0, 10, n), np.full(n * (m - 1), q)).reshape(m, -1).cumprod(axis=0) # чтобы преобразовать в список, нужно добавить .tolist()
print(a)
[[ 4 6 8 2 0 9]
[ 16 24 32 8 0 36]
[ 64 96 128 32 0 144]
[256 384 512 128 0 576]]