(Python) Матрица, замена чисел
Снизу прикрепила код для заполнения матрицы, если не удобен можете изменить.
Яркости пикселей рисунка закодированы числами от 0 до 255 в виде матрицы. Преобразовать рисунок в черно-белый по следующему алгоритму: вычислить среднюю яркость пикселей по всему рисунку все пиксели, яркость которых меньше средней, сделать черными (записать код 0), а остальные – белыми (код 255)
Пример:
Матрица А:
12 14 67 45
32 87 45 63
69 45 14 11
40 12 35 15
Средняя яркость 37.88
Результат:
0 0 255 255
0 255 255 255
255 255 0 0
255 0 0 0
import random
A = []
imax = 0
jmax = 0
imin = 0
jmin = 0
x = int(input("размер = "))
for i in range(x):
A.append([])
for c in range(x):
A[i].append(random.randint(10,99))
min = A[0][0]
max = A[0][0]
print('Матрица А:')
for i in range(x):
print()
for c in range(x):
print(" ",A[i][c],end = ' ')
for i in range(x):
print()
for c in range(x):
if(A[i][c] > max):
max = A[i][c]
imax = i+1
jmax = c+1
if(A[i][c] < min):
min = A[i][c]
imin = i+1
jmin = c+1
Ответы (2 шт):
Автор решения: splash58
→ Ссылка
Можно воспользоваться библиотекой numpy
>>> import numpy as np
>>> x = 5
>>> matrix = np.random.randint(0,255,(x,x))
>>> matrix
array([[247, 21, 232, 117, 139],
[ 5, 182, 102, 24, 63],
[234, 10, 86, 74, 210],
[102, 164, 152, 174, 77],
[141, 176, 120, 177, 139]])
>>> (matrix > matrix.mean()).astype(int) * 255
array([[255, 0, 255, 0, 255],
[ 0, 255, 0, 0, 0],
[255, 0, 0, 0, 255],
[ 0, 255, 255, 255, 0],
[255, 255, 0, 255, 255]])
Автор решения: MiniMax
→ Ссылка
Можно сделать короче, используя generator и list comprehension:
from pprint import pprint
mtrx = [
[12, 14, 67, 45],
[32, 87, 45, 63],
[69, 45, 14, 11],
[40, 12, 35, 15]
]
avg = sum(col for row in mtrx for col in row) / (len(mtrx) * len(mtrx[0]))
new_mtrx = [[255 if col > avg else 0 for col in row] for row in mtrx]
pprint(new_mtrx, width=30)
Output
[[0, 0, 255, 255],
[0, 255, 255, 255],
[255, 255, 0, 0],
[255, 0, 0, 0]]