создать и инициализировать сетку (матрицу) 100x100 с помощью numpy - PullRequest
0 голосов
/ 09 июня 2018

Я выполняю задачу по моделированию модели сегрегации Шеллинга.

Теперь я хотел бы знать следующее:

1) как создать 2d матрицу (сетку) с ячейками 100x100используя numpy

2) как заполнить матрицу 40% агентов А 1;40% агентов B с 2;и 20% пусто, что равно 0. Агенты расположены случайным образом.

Я знаю, что есть numpy.ones: numpy.zeroes numpy.array, но я не знаю, как создать такую ​​2d матрицуи заполнить его случайным образом с определенными значениями.Как перебрать?

Может, кто-нибудь может мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 09 июня 2018

Есть множество подходов со всеми своими плюсами и минусами.Я не буду перечислять их все.

Об этом должно быть легко рассуждать, и оно не самое медленное, но, вероятно, и не самое быстрое, поскольку мы используем два необычных шага индексации (еще одна причина здесьчтобы на самом деле прочитать документацию!):

Код

import numpy as np

N = 10
a, b, c = 0.4, 0.4, 0.2

def build_mat(N, a, b, c):
    n_a = int(N * N * a)
    n_b = int(N * N * b)
    n_c = N - n_a - n_b

    rng_nonzero_inds_1d = np.random.choice(N*N, n_a + n_b, replace=False)

    mat = np.zeros(N*N)
    mat[rng_nonzero_inds_1d[:n_a]] = 1
    mat[rng_nonzero_inds_1d[n_a:]] = 2

    return mat.reshape((N,N))

mat = build_mat(N, a, b, c)
print('A: ', np.count_nonzero(mat==1))
print('B: ', np.count_nonzero(mat==2))
print('C: ', np.count_nonzero(mat==0))
print(mat)

Вывод

A:  40
B:  40
C:  20
[[ 1.  1.  2.  0.  2.  1.  0.  2.  1.  2.]
 [ 2.  1.  2.  1.  0.  1.  1.  0.  2.  0.]
 [ 0.  2.  1.  1.  2.  0.  2.  2.  2.  2.]
 [ 1.  0.  2.  1.  2.  2.  0.  1.  2.  0.]
 [ 1.  2.  1.  1.  2.  1.  2.  1.  2.  0.]
 [ 2.  0.  1.  2.  2.  1.  1.  2.  2.  1.]
 [ 0.  2.  1.  1.  2.  1.  1.  2.  0.  2.]
 [ 2.  2.  1.  2.  1.  2.  1.  1.  0.  0.]
 [ 2.  1.  1.  0.  0.  1.  2.  1.  1.  1.]
 [ 1.  1.  2.  2.  1.  2.  2.  0.  0.  1.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...