首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用numpy创建并初始化网格(矩阵) 100x100

使用numpy创建并初始化网格(矩阵) 100x100
EN

Stack Overflow用户
提问于 2018-06-09 08:04:02
回答 1查看 1.2K关注 0票数 -4

我正在做一个模拟谢林的隔离模型的任务。

现在我想知道以下几点:

1)如何使用numpy生成100x100单元的2d矩阵(网格)

2)如何用40%的智能体A填充1;40%的智能体B填充2;20%为空,为0。这些代理是随机放置的。

我知道有numpy.ones: numpy.zeroes numpy.array,但我不知道如何创建这样的2d矩阵并随机填充某些值。如何迭代?

也许有人能帮到我?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 09:07:03

有很多种方法,各有优缺点。我不会把它们都列出来。

这应该很容易理解,它不是最慢的,但也可能不是最快的,因为我们使用了两个花哨的索引步骤(这里是实际阅读文档的另一个原因!):

代码

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
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.]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50769767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档