Перейти к содержимому

Как создать рандомную матрицу в питоне

  • автор:

NumPy, часть 3: random

Python 3 логотип

Здравствуйте! Я продолжаю работу над пособием по python-библиотеке NumPy.

В прошлой части мы научились работать с массивами.

Сегодня мы узнаем, как создавать массивы из случайных элементов и как работать со случайными элементами в NumPy.

Путь первый

Создавать списки, используя встроенный модуль random, а затем преобразовывать их в numpy.array:

Но есть способ лучше.

numpy.random

Для создания массивов со случайными элементами служит модуль numpy.random.

Создание массивов

Самый простой способ задать массив со случайными элементами — использовать функцию sample (или random, или random_sample, или ranf — это всё одна и та же функция).

Без аргументов возвращает просто число в промежутке [0, 1), с одним целым числом — одномерный массив, с кортежем — массив с размерами, указанными в кортеже (все числа — из промежутка [0, 1)).

С помощью функции randint или random_integers можно создать массив из целых чисел. Аргументы: low, high, size: от какого, до какого числа (randint не включает в себя это число, а random_integers включает), и size — размеры массива.

Также можно генерировать числа согласно различным распределениям (Гаусса, Парето и другие). Чаще всего нужно равномерное распределение, которое можно получить с помощь функции uniform.

Выбор и перемешивание

Перемешать NumPy массив можно с помощью функции shuffle:

Также можно перемешать массив с помощью функции permutation (она, в отличие от shuffle, возвращает перемешанный массив). Также она, вызванная с одним аргументом (целым числом), возвращает перемешанную последовательность от 0 до N.

Сделать случайную выборку из массива можно с помощью функции choice. Про неё стоит рассказать подробнее.

numpy.random.choice(a, size=None, replace=True, p=None)

  • a : одномерный массив или число. Если массив, будет производиться выборка из него. Если число, то выборка будет производиться из np.arange(a).
  • size : размерности массива. Если None, возвращается одно значение.
  • replace : если True, то одно значение может выбираться более одного раза.
  • p : вероятности. Это означает, что элементы можно выбирать с неравными вероятностями. Если не заданы, используется равномерное распределение.

Инициализация генератора случайных чисел

seed(число) — инициализация генератора.

get_state и set_state — возвращают и устанавливают состояние генератора.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Заполнить элементы матрицы случайным образом целыми числами. Вывести элементы матрицы

Задания: Заполнить элементы матрицы случайным образом целыми числами. Вывести элементы матрицы. Вывести номер столбцов, сумма элементов которых является крупнейшей В питоне недавно, и язык не очень нравится но практические сдавать надо.

import random def creatArray(): print('Input first index matrix: ') x = int(input()) print('Input second index matrix: ') y = int(input()) array = ([0]*x)*y for i in range (0,x-1): for j in range (0, y-1): array[i][j] = random.randint(0,100) return array print(creatArray()) 

таким образом хотел заполнить массив, но выдает ошибку на строке 14 и 11 'TypeError: 'int' object does not support item assignment Прошу объяснить в чем здесь проблема и помочь с решением с 3 заданиям (вывести номер столбцов. )

Как создать матрицу NumPy со случайными числами

Вы можете использовать следующие методы для создания матрицы NumPy со случайными числами:

Способ 1: создать матрицу случайных целых чисел NumPy

np.random.randint (low, high, (rows, columns)) 

Метод 2: создать матрицу NumPy случайных чисел с плавающей запятой

np.random.rand (rows, columns) 

В следующих примерах показано, как использовать каждый метод на практике.

Пример 1: создание матрицы случайных целых чисел NumPy

В следующем коде показано, как создать матрицу NumPy случайных значений в диапазоне от 0 до 20 с формой из 7 строк и 2 столбцов :

import numpy as np #create NumPy matrix of random integers np.random.randint (0, 20, (7, 2)) array([[ 3, 7], [17, 10], [ 0, 10], [13, 16], [ 6, 14], [ 8, 7], [ 9, 15]]) 

Обратите внимание, что каждое значение в матрице находится в диапазоне от 0 до 20, а окончательная форма матрицы — 7 строк и 2 столбца.

Пример 2: создание матрицы случайных чисел с плавающей запятой NumPy

В следующем коде показано, как создать матрицу NumPy со случайными значениями с плавающей точкой от 0 до 1 и формой из 7 столбцов и 2 строк:

import numpy as np #create NumPy matrix of random floats np.random.rand (7, 2) array([[0.64987774, 0.60099292], [0.13626106, 0.1859029 ], [0.77007972, 0.65179164], [0.33524707, 0.46201819], [0.1683 , 0.72960909], [0.76117417, 0.37212974], [0.18879731, 0.65723325]]) 

Результатом является матрица NumPy, которая содержит случайные значения с плавающей запятой от 0 до 1 в форме 7 строк и 2 столбцов.

Обратите внимание, что вы также можете использовать функцию NumPy round() для округления каждого числа с плавающей запятой до определенного числа знаков после запятой.

Например, следующий код показывает, как создать матрицу NumPy случайных чисел с плавающей запятой, каждое из которых округлено до 2 знаков после запятой:

import numpy as np #create NumPy matrix of random floats rounded to 2 decimal places np.round (np.random.rand (5, 2), 2) array([[0.37, 0.63], [0.51, 0.68], [0.23, 0.98], [0.62, 0.46], [0.02, 0.94]]) 

Примечание.Полную документацию по функции NumPy rand() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:

Генераторы списков для матричных операций. Примеры

Генераторы списков удобно использовать для матриц (многомерных массивов) чисел заданной размерности. Матрицы можно представлять в виде кортежей или списков.
Лучше матрицы представлять в виде вложенных списков. В наиболее общем случае, представление двумерной матрицы в виде списка на языке Python имеет следующий вид

MatrixName = [ [ a11, a12, . a1n ], [ a21, a22, . a2n ], . [ am1, am2, . amn ] ]
  • MatrixName – имя матрицы;
  • a11 , …, amn — элементы матрицы. Это могут быть числа, числа с плавающей запятой, символы, строки, логические значения ( true , false ). Также это могут быть более сложные объекты, например, те же списки, кортежи или множества.

Именно генераторы списков являются наиболее удобными для обработки матриц любой размерности, поскольку они позволяют автоматически сканировать строки и столбцы матриц.

2. Примеры решения задач с использованием генераторов списков
2.1. Задачи на построение матриц
2.1.1. Построение матрицы заданной размерности. Элементы матрицы формируются случайным образом

Условие задачи. Построить матрицу заданной размерности m*n и вывести ее на экран. Элементы матрицы формируются случайно и имеют значение от 1 до 10 включительно.

Решение.

# Генераторы списков # Задача. # Сформировать матрицу размерностью m*n, # где m, n вводяться с клавиатуры. # 1. Подключить модуль random для формирования # случайных чисел import random # 2. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 3. Сформировать матрицу размером m*n. # Значения элементов матрицы формируются # случайным образом в пределах [1, 10]. Matrix = [ [ random.randint(1, 11) for j in range(n)] for i in range(m) ] print('Matrix:') # 4. Вывести результат for i in range(m): print(Matrix[i])
m = 4 n = 5 Matrix: [10, 2, 3, 8, 7] [6, 9, 2, 7, 11] [2, 5, 9, 10, 4] [10, 10, 11, 5, 10]
2.1.2. Формирование двумерной матрицы заданной размерности. Элементы матрицы вводятся с клавиатуры

Условие задачи. Сформировать матрицу размерностью m×n . Значение размеров m , n и значения элементов вводятся с клавиатуры.

Решение.

# Генераторы списков # Задача. # Сформировать матрицу размером m*n, # где m, n вводятся с клавиатуры. # Элементы матрицы вводятся с клавиатуры. # 1. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 2. Сформировать матрицу размером m*n. # Значения элементов матрицы вводятся с клавиатуры. Matrix = [ [ input("M["+str(i)+"]["+str(j)+"] color: #ff9900;">for j in range(n) ] for i in range(m) ] # 3. Вывести результат print('Matrix:') for i in range(m): print(Matrix[i])
m = 2 n = 3 M[0][0]=1 M[0][1]=2 M[0][2]=3 M[1][0]=4 M[1][1]=5 M[1][2]=6 Matrix: [1, 2, 3] [4, 5, 6]
2.2. Задачи на обработку данных, которые размещаются в матрице
2.2.1. Вычисление количества элементов матрицы, которые больше 5

Условие задачи. Построить матрицу целых чисел размерностью m×n, где m — количество строк матрицы, n — количество столбцов матрицы. Значения m и n вводятся с клавиатуры. Числа в матрице формируются случайным образом и находятся в пределах от 1 до 10. Используя генератор списков вычислить количество элементов матрицы, которые более 5.

Решение.

# Генераторы списков # Задача. # Построить матрицу целых чисел заданной размерности m * n. # С помощью генератора случайных чисел вычислить # кол-во элементов матрицы, которые более 5. # 1. Подключить модуль random import random # 2. Ввод размеров матрицы m = input("m color: #ff0000;"># количество строк n = input("n color: #ff0000;"># количество столбцов # 3. Формирование матрицы размером m*n случайным образом # с помощью цикла for Matrix = [] # Внешний цикл формирования матрицы Matrix for i in range(m): # Создать строку матрицы в виде списка row = [] # Внутренний цикл формирования строки row for j in range(n): # Сформировать случайное число від 1 до 10 randNumber = random.randint(1, 11) # Добавить случайное число к списку row row.append(randNumber) # Добавить строку row к матрице Matrix Matrix.append(row) # 4. Вывести сформированную матрицу Matrix для контроля print('Matrix M:') for i in range(m): print(Matrix[i]) # 5. С помощью генератора списков вычислить количество элементов, которые больше 5 count = len([ Matrix[i][j] for i in range(m) for j in range(n) if Matrix[i][j]>5 ]) print(count)
m = 3 n = 4 Matrix M: [10, 4, 3, 4] [3, 3, 10, 2] [11, 9, 1, 4] 4
2.2.2. Задача. Исчисление суммы элементов матрицы согласно условию

Условие задачи. Задан двумерный массив целых чисел размером m×n. Определить сумму элементов массива, которые находятся в пределах [5; 10]. Элементы массива вводятся с клавиатуры.

Решение.

При формировании генератора списка для расчета суммы используется функция sum() .

# Генераторы списков # Задача. # Вычислить сумму элементов матрицы, находящихся в диапазоне [5; 10]. # Размер матрицы m, n и значения элементов вводятся с клавиатуры. # 1. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 2. Сформировать матрицу размером m*n. # Значения элементов матрицы вводятся с клавиатуры. Matrix = [ [ input("M["+str(i)+"]["+str(j)+"] color: #ff9900;">for j in range(n) ] for i in range(m) ] # 3. Вычислить сумму - использовать генератор списков summ = sum( Matrix[i][j] for i in range(m) for j in range(n) if (Matrix[i][j]>=5)and(Matrix[i][j]<=10)) print("summ color: #333300;">⇑ 
2.3. Задачи на создание новых матриц на основе заданных
2.3.1. Создать третью матрицу C на основе двух матриц A, B

Условие задачи. Заданы две матрицы A, B вещественных чисел. Размерность матриц m×n. Используя генератор списков сформировать третью матрицу C, каждый элемент cij которой определяется по правилу

cij = aij + bij

Решение.

# Генераторы списков # Задача. # На основе матриц A, B сформировать третью матрицу C. # 1. Подключить модуль random для формирования случайных чисел import random # 2. Ввести размерность матриц A, B m = input('m = ') n = input('n = ') # 3. Сформировать матрицы A и B размером m*n. # Значения элементов матриц генерируются случайным образом # и находятся в пределах [ 1; 100] A = [ [random.randint(1, 101) for j in range(n)] for i in range(m) ] B = [ [random.randint(1, 100) for j in range(n)] for i in range(m) ] # 4. Сформировать третью матрицу C C = [ [ A[i][j]+B[i][j] for j in range(n) ] for i in range(m) ] # 5. Вывести матрицу A для контроля print('-------------------------') print("A:") for i in range(m): print(A[i]) # 6. Вывести матрицу B для контроля print('B:') for i in range(m): print(B[i]) # 7. Вывести матрицу C print('C:') for i in range(m): print(C[i])
m = 4 n = 6 ------------------------- A: [91, 25, 72, 95, 53, 97] [14, 53, 36, 66, 36, 48] [78, 57, 69, 97, 51, 39] [42, 47, 53, 47, 21, 34] B: [48, 73, 25, 13, 92, 22] [45, 56, 95, 64, 43, 89] [43, 44, 11, 29, 82, 32] [95, 87, 33, 90, 67, 79] C: [139, 98, 97, 108, 145, 119] [59, 109, 131, 130, 79, 137] [121, 101, 80, 126, 133, 71] [137, 134, 86, 137, 88, 113]
2.3.2. Создать результирующую матрицу на основе исходной согласно с заданным условием

Условие задачи. Задана квадратная матрица A целых чисел размерностью n . На основе матрицы A образовать матрицу B , каждый элемент которой определяется по правилу:

B[i][j] = A[i][j] + 10

Для получения результирующей матрицы B использовать генератор списка.

Решение.

# Генераторы списков # Задача. # На основе матрицы A создать матрицу B согласно правилу: # B[i][j] = A[i][j] + 10 # 1. Подключить модуль random для формирования случайных чисел import random # 2. Ввести размерность матрицы A m = int(input('m = ')) n = int(input('n = ')) # 3. Сформировать матрицу A размером m*n # Значения элементов матрицы генерируются случайным образом # и находятся в пределах [ -10; 10] A = [ [random.randint(-10, 11) for j in range(n)] for i in range(m) ] # 4. Вывести матрицу A для контроля print('-------------------------') print("A:") for i in range(m): print(A[i]) # 5. Формирование матрицы B с помощью генератора списка B = [ [ A[i][j]+10 for j in range(n) ] for i in range(m) ] # 6. Вывести результирующую матрицу B print("B:") for i in range(m): print(B[i])
m = 3 n = 5 ------------------------- A: [-4, 10, -5, 2, -6] [10, -3, 5, 10, -7] [7, -9, -3, -3, 11] B: [6, 20, 5, 12, 4] [20, 7, 15, 20, 3] [17, 1, 7, 7, 21]

Связанные темы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *