我正在做一个模拟谢林的隔离模型的任务。
现在我想知道以下几点:
1)如何使用numpy生成100x100单元的2d矩阵(网格)
2)如何用40%的智能体A填充1;40%的智能体B填充2;20%为空,为0。这些代理是随机放置的。
我知道有numpy.ones: numpy.zeroes numpy.array,但我不知道如何创建这样的2d矩阵并随机填充某些值。如何迭代?
也许有人能帮到我?
谢谢!
发布于 2018-06-09 09:07:03
有很多种方法,各有优缺点。我不会把它们都列出来。
这应该很容易理解,它不是最慢的,但也可能不是最快的,因为我们使用了两个花哨的索引步骤(这里是实际阅读文档的另一个原因!):
代码
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.]]
https://stackoverflow.com/questions/50769767
复制相似问题