- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正处于构建模拟的规划阶段,需要关于如何基于内存和速度考虑来表示数据的想法。
在每个时间步,模拟过程都会创建 10^3 到 10^4 条新数据记录,并查看每个新记录或现有记录(其中有 10^6 到 10^8 条),然后将其删除或修改它。
每条记录有 3-10 个简单字段,每个字段要么是一个整数,要么是一个由多个 ASCII 字符组成的字符串。此外,每条记录还有 1-5 个其他字段,每个字段都是一个包含整数的可变长度列表。一条典型的记录重 100-500 字节。
修改或删除过程是这样工作的:对于这条记录,计算一个函数,其参数是这条记录的一些字段的值,以及另一条记录的这些字段的值。根据结果,流程准备以某种方式删除或修改其字段。
然后对彼此重复记录。然后移动到下一条记录并重复。处理完所有记录后,模拟就可以进入下一个时间步长了。
就在进入下一个时间步长之前,应用准备好的所有删除和修改。
允许的记录越多,模拟效果越好。如果所有记录都在 RAM 中,则缺点是模拟大小,而优点可能是速度。模拟不需要是实时的,但显然我不希望它太慢。
为了表示内存中的每条记录,我知道这些选项:列表或字典(其中嵌套了一些列表)或类实例。为了存储所有记录并在另一天继续模拟,选项按我熟悉程度的递减顺序是:一个 csv 文件,其中每一行都是一条记录,或者只是将所有记录放在 RAM 中,然后将它们放入一个文件中(可能使用pickle),或者使用某种数据库。
我已经学习了 Python 基础知识以及生成器等一些概念,但还没有学习数据库,还没有尝试过 pickling,显然需要学习更多。如果可能的话,我会避免使用多台计算机,因为我只有 1 台,并避免并发,因为它看起来太可怕了。
关于如何在内存中表示记录,以及如何存储模拟系统,您有什么建议?
最佳答案
如果我们采用最坏的情况,即 10**8 条记录和每条记录 500 字节,那将是大量 RAM,因此值得设计一些灵 active 并假设并非所有记录都始终驻留在 RAM 中。您可以创建一个抽象类来隐藏记录所在位置的详细信息。
class Record(object):
def __init__(self, x, y, z):
pass # code goes here
def get_record(id):
pass # code goes here
您可以使用名称 __index__()
而不是使用名称 get_record()
然后您的类将像列表一样工作,但可能会去到一个数据库,或引用 RAM 缓存,或其他任何内容。只需使用整数作为 ID 值。然后,如果您改变了对持久性存储的想法(从数据库切换到 pickle 或其他),实际代码将不会改变。
您也可以尝试制作一个非常大的交换文件,让虚拟内存系统处理进出实际 RAM 的洗牌记录。这很容易尝试。它没有任何简单的方法来中断计算和保存状态。
您可以将每条记录表示为元组,甚至是命名元组。我相信元组的开销是 Python 中所有“容器”对象中最低的。 (命名元组只在一个地方存储一次名称,因此它的开销也很低。)
关于python - 对于仿真系统,哪种数据结构最合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236840/
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
我必须模拟 Ant 在它们的家(黑框)和食物(黄框)之间移动。这些三色盒子是 Ant 。我为绘制所示图形编写的代码如下: % background background() % making
我有一些使用 java.awt.Color 的代码。我想将我的 Java 代码转换为 GWT。所以我将在我的 GWT 项目中模拟 java.awt.Color。 一种方法是编写一个名为源路径为awt的
大家好圣诞节快乐我需要一个建议我有以下代码: int main() { int k=5000000; int p; int sum=0; for (p=0;p<
假设您有一个 Simulink 仿真,其中某个信号首先为正,然后在给定时间间隔内经过一段时间 t 后变为负。您的目标是找到零交叉点。 第一种方法是在给定的间隔内绘制信号,保存它并计算过零。 当针对不同
现在是周末,所以我通过编写一个爱好项目来放松整周的编程。 昨天写了一个MOS 6502 CPU仿真器的框架,寄存器、堆栈、内存和所有操作码都实现了。 (来源链接如下) 我可以在我编写的调试器中手动运行
出于测试目的,我需要创建如下所示的 AVD: 但是我所有的模拟设备都是这样的: 它们只包含屏幕,没有硬件键盘。这是“新设备”对话框: “存在硬件键盘”没有任何效果。如何获得所需的设备配置? Andro
有没有什么地方有一个独门绝技的小马,它可以使 css3 的所有优点(阴影、发光、圆 Angular )并使其与 ie6 兼容/看起来相似... i have try that ...哦,天哪,这太丑了
在用 c++ 实现“super”之前,我正在寻找一种自己模拟它的方法。动机:这是一个典型的场景: class A { void SomeMethod(); } class B : public
我正在研究一个模拟 QEMU 设备来模拟 FPGA PCIe 接口(interface)。我使用 lev-pci 设备作为基本模板: https://github.com/levex/kernel-q
您知道为 Windows 和/或 Linux 制作软件(虚拟)HID 设备的方法吗? 我想将一些传感器用作 HID,但它们没有任何 HID,所以我想我可以在 PC(模拟 onde)上安装自己的 HID
我很确定这个问题的答案是否定的,但万一有一些 PHP 大师 是否有可能以可以传入无效参数或不存在的变量的方式编写函数,并且 php 在不使用 '@' 的情况下不会出错 很像 empty 和 isset
当 Kinect 本身未插入时,是否可以模拟 Kinect 传感器(用于与 Kinect SDK 一起使用)? 起初我认为 Kinect Studio 完全符合我的要求,但现在看来 Kinect St
我已经搜索了 1 个多小时没有成功。是否有模拟框架集的纯 CSS 方式?我的意思是,真的在模仿它。我发现了一些有趣的东西,您将在其中固定顶部和底部 block ,但内容的滚动条是常规的浏览器主体滚动条
是否存在用于编程需求的虚拟 GPIO 驱动程序? 我必须在我的 Linux PC 上开发一个软件,然后在一些带有物理 GPIO 的嵌入式系统(C.H.I.P.、OpenWRT 等等......)上试用
我正在尝试开始 Android 开发。 我在 Linux 上使用 eclipse 并使用 Pentium IV @3.2Gh 和 1GB 内存。我刚刚遵循“hello android”howto,只有
我使用 Google Chrome 和 Intern 运行自动化测试,我想知道是否有办法从 CLI 以仿真模式启动 Chrome 或使用特定标志来测试移动渲染。如果没有,您知道一个好的解决方法吗? 我
我正在尝试通过 STM32F1 上的闪存模拟 EEPROM,如 here 所述(对于STM32F4)例如,但我正在努力更改STM32F1RB(中密度)规范的代码。我正在使用 SW4STM32、Cube
使用下面的测试代码,我尝试使用 中的 simulator 通过 xmega128a3u 的 USART 发送数据Atmel Studio. 观察 I/O 查看数据寄存器从未设置,即使我正在设置它。是我
我是一名优秀的程序员,十分优秀!