python - 使用 numpy 创建和初始化网格(矩阵)100x100
问题描述
我正在做一项模拟谢林隔离模型的任务。
现在我想知道以下内容:
1)如何使用 numpy 生成具有 100x100 单元的二维矩阵(网格)
2)如何用 1 填充 40% 的 Agent A 的矩阵;40% 的代理 B 有 2 个;并且 20% 是空的,即 0。代理是随机放置的。
我知道有 numpy.ones: numpy.zeroes numpy.array 但我不知道如何创建这样的二维矩阵并用某些值随机填充它。如何迭代?
有些人可以帮助我吗?
谢谢!
解决方案
有很多方法,各有利弊。我不会一一列举。
这应该很容易推理,它不是最慢的,但也可能不是最快的,因为我们使用了两个花哨的索引步骤(这里还有一个实际阅读文档的理由!):
代码
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.]]
推荐阅读
- c# - 在 WPF 中将列表绑定到组合框
- firebase-dynamic-links - Firebase 动态 URL 离线工作?
- java - 为了创建可运行的 jar,Maven application.properties 文件中应该包含什么?
- ios - IOS 11.3 通用应用部署错误:“无效捆绑。您的应用支持 iPad 上的多任务处理,因此您必须包含 UILaunchStoryboardName”
- javascript - 在 JavaScript 中解析的棘手日期字符串
- java - 无法从 php 执行 javac
- google-chrome - Chrome 设备模式 - 看不到视口控件
- python-2.7 - Python自动选择颜色条
- reactjs - this.forceUpdate() 不重新渲染动态创建的组件
- android - 将对象的嵌套数组列表从适配器传递到活动