Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么当我访问链接列表时mathematica内核会崩溃?

为什么当我访问链接列表时mathematica内核会崩溃?
EN

Stack Overflow用户
提问于 2012-12-07 22:52:00
回答 1查看 742关注 0票数 3

我使用mathematica 7,我试图使用一个单链接列表(~50,000个元素)来避免在动态列表中使用AppendTo来提高速度。在这个测试中,我可以创建一个包含10个元素的列表,如下所示

代码语言:javascript
运行
AI代码解释
复制
list1 = Fold[{#1, #2} &, {}, RandomInteger[10^5, 10]]

我试着像这样用Part访问它(访问一个随机元素100次)

代码语言:javascript
运行
AI代码解释
复制
Timing[list1[[Sequence @@ ConstantArray[1, #], 2]] & /@RandomInteger[{1,10}, 100]]

对于小型列表(如上面所示的10),这很好。由于我不明白的原因,当列表中有更多的元素(如10^4)时,这会扼杀内核。我试过在这个网站上四处看看&其他地方,但我只是不知道我应该如何使用链接列表。我甚至尝试过使用不同的实现,如f[e1,f[e2,f[e3,...f[]...]]],但在使用此方案时,我不知道如何访问和操作元素。我想问题必须做w/ $RecursionLimit,但我不知道如何绕过它。

特别是我希望能用

代码语言:javascript
运行
AI代码解释
复制
list1[[Sequence @@ ConstantArray[1, index], 2]] = new value

在我的密码里。同样,当列表很小时,这也是可行的,但是对于更大的列表,内核最终会崩溃。奇怪的是,内核并不总是崩溃,而只是随机地处理大型列表。这听起来类似于here on SE描述的内容,但我不知道这种讨论是否相关。真的,我只是在修改LL元素方面需要帮助&在mathematica中正确地使用LL。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-12-08 04:14:30

我可以确认崩溃,但只有使用更深层次的Part规范:

代码语言:javascript
运行
AI代码解释
复制
n = 5000000;

list1 = Fold[List, {}, RandomInteger[10^5, n]];

Do[
 list1[[Sequence @@ ConstantArray[1, i], 2]] = "token"; Print[i],
 {i, 100000, 200000, 10000}
]

100000 110000 120000 130000 140000 150000 160000 170000

因此,在我的系统中,坠机的深度超过17万。它也发生了,至少在这个深度,只有在分配一个部分时,而不仅仅是提取一个:

代码语言:javascript
运行
AI代码解释
复制
Timing[
 list1[[##, 2]] & @@ ConstantArray[1, #] & /@ RandomInteger[{1, n - 1}, 10]
]

{1.03,{77041,74008,29990,13286,12762,48702,76027,25009,31267,1887}

推荐

作为另一种选择,我建议使用 functions

代码语言:javascript
运行
AI代码解释
复制
n = 5000000;

list2 = Internal`Bag @ RandomInteger[10^5, n];  (* fill our Bag *)

Internal`StuffBag[list2, 27182];  (* add an element to the Bag *)

Internal`BagLength @ list2  (* check the length of our Bag *)

5000001

代码语言:javascript
运行
AI代码解释
复制
pos = RandomInteger[{1, n}, 10];  (* pick ten random positions *)

(* assign to those positions values 1 through 10 *)
MapIndexed[
  (Internal`BagPart[list2, #] = #2[[1]]) &,
  pos
];

Internal`BagPart[list2, pos]  (* check the contents of those positions *)

{1、2、3、4、5、6、7、8、9、10}

代码语言:javascript
运行
AI代码解释
复制
(* convert our Bag into a standard list *)
flat = Internal`BagPart[list2, All];

flat[[pos]]  (* check the contents again *)

{1、2、3、4、5、6、7、8、9、10}

代码语言:javascript
运行
AI代码解释
复制
Last @ flat  (* check that the element we appended is still there *)

27182

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13775274

复制
相关文章
水平滚动条
主要用到并排Div 的父级设置white-space: nowrap,并排的div设置display:inline-block;
tianyawhl
2019/07/16
2.6K0
[iOS] WSHorizontalPickerView 图片水平滚动封装
之前这篇文章传送门本来是记录自己练手的demo的,后来很多人来问我要代码。今天就抽时间封装了一下,没有考虑太多情况,等我有空再去仔细考虑吧。
wOw
2018/09/18
3K0
WPF 让 TextBox 支持水平滚动
超级简单的方法,只需要设置 HorizontalScrollBarVisibility 可见就可以了
林德熙
2022/08/12
9850
CSS——多列
多列属性可以将文本设计成像报纸杂志那种多列排版的布局,类似于Microsoft Word中的段落分栏功能。
Html5知典
2019/11/26
1.3K0
pandas dataframe 新增单列和多列
dataframe assign方法,返回一个新对象(副本),不影响旧dataframe对象
lovelife110
2021/01/14
4.5K0
表单水平文字滚动,效果还有阴影
加菲猫的VFP
2023/08/21
2720
表单水平文字滚动,效果还有阴影
自定义View实现水平滚动控件
      前几天项目中需要使用到一个水平可滚动的选择条,类似下图效果(图片是从简书上一位作者那儿找来的,本篇也是在这位作者的文章的基础上修改的,站在大神的肩膀上,哈哈,由于原文没有提供demo,而且
coderZhen
2018/06/28
9410
jQuery无缝图片横向(水平)/竖向(垂直)滚动
jQuery的一个不错的小插件,记性越来越差了,整理一下贴在这里,方便以后Copy & Paste <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> </title> <script typ
菩提树下的杨过
2018/01/22
17.4K0
有意思的水平横向溢出滚动
最近接到一个很有意思的需求,能否做到当内容横向溢出时,依然能够使用鼠标滚轮对内容进行滚动的方法。
Sb_Coco
2022/09/28
2.6K0
有意思的水平横向溢出滚动
excel 多列内容拼接
例如想要拼接  A2 和 B2 的内容生成一个新列,A2 内容为 320,B2 内容为 480,我们生成新列,需要拼接两列内容,中间同时拼接 * ,新列公式如下:
蓓蕾心晴
2022/10/27
1.5K0
联合索引(多列索引)[通俗易懂]
联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.
全栈程序员站长
2022/09/05
2.7K0
如何纯CSS实现标题栏、表格头水平滚动垂直不滚动
有些报表会很宽,浏览器水平放不下,需要水平滚动显示,这个可以设置overflow-y:hidden实现,很基本的实现,没什么难度。
周陆军博客
2023/05/07
1.7K0
JqGrid实现超长水平(左右)滚动条功能
使用JqGrid来实现列表功能非常方便快捷,但在使用的过程中还会遇到一些定制化的问题。这篇文章来跟大家说一下当列表中数据比较多时,如何实现水平(左右)滚动来确保能够查看完整的信息。
程序新视界
2020/05/18
3.9K0
MFC 控件编程之水平滚动条跟垂直滚动条
  首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置.
IBinary
2019/05/25
2.9K0
MySQL索引中的前缀索引和多列索引
正确地创建和使用索引是实现高性能查询的基础,本文笔者介绍MySQL中的前缀索引和多列索引。
玖柒的小窝
2021/11/06
4.7K0
点击加载更多

相似问题

水平滚动的多列问题

21

列和水平滚动

12

有多列的页面,水平滚动,没有垂直滚动

22

具有水平滚动和自动列宽和高度的多列CSS列表

36

具有水平滚动和图像的自动多列固定高度问题

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档