小编Ced*_* H.的帖子

选择性能最佳的容器(阵列)

这是关于容器的一个小问题,特别是数组.

我正在编写一个物理代码,主要操作一个大的(> 1 000 000)"粒子"集(double每个有6个坐标).我正在寻找最好的方法(在性能方面)来实现一个类,该类将包含这些数据的容器,并将为这些数据提供操作原语(例如实例化operator[]等).

如何使用此集合有一些限制:

  • 它的大小是从配置文件中读取的,在执行期间不会更改
  • 它可以被视为N(例如1 000 000)行和6列(每个存储一维坐标)的大二维数组
  • 在一个大循环中操作数组,访问每个"粒子/线"并使用其坐标进行计算,并将结果存储回该粒子,依此类推每个粒子,依此类推,每次迭代大循环.
  • 在执行期间不添加或删除新元素

第一个结论,因为对元素的访问基本上是通过逐个访问每个元素来完成的[],我认为我应该使用普通的动态数组.

我已经探讨了一些事情,我想对那些可以给我最好表现的人发表意见.

据我所知,使用动态分配的数组而不是a是没有优势的std::vector,因此double** array2d = new ..., loop of new, etc排除了类似的东西.

那么使用它是个好主意std::vector<double>吗?

如果我使用a std::vector,我应该创建一个像std::vector<std::vector<double> > my_array索引一样的二维数组my_array[i][j],或者这是一个坏主意,最好使用std::vector<double> other_array和访问它other_array[6*i+j].

也许这可以提供更好的性能,特别是当列的数量是固定的并且从一开始就知道.

如果您认为这是最佳选择,是否可以将这个向量包装为可以使用定义为other_array[i,j] // same as other_array[6*i+j]没有开销的索引运算符(如每次访问时的函数调用)访问它?

另一种选择,我到目前为止使用的是使用闪电战,特别是blitz::Array:

typedef blitz::Array<double,TWO_DIMENSIONS> store_t;
store_t my_store;
Run Code Online (Sandbox Code Playgroud)

我的元素被访问的地方:my_store(line, column);.

我认为在我的情况下使用Blitz没有多大优势,因为我逐个访问每个元素,如果我直接在数组上使用操作(如矩阵乘法),那么Blitz会很有趣,我不是.

你认为闪电战是好的,还是我的情况没用?

这些是我到目前为止考虑的可能性,但也许是最好的一个我还是另一个,所以不要犹豫,建议我其他的东西.

非常感谢您对此问题的帮助!

编辑:

从非常有趣的答案和评论下面看来,一个好的解决方案如下:

  • 使用一个结构particle(包含6个双打)或6个双打的静态数组(这避免使用二维动态数组)
  • 使用一个 …

c++

11
推荐指数
2
解决办法
918
查看次数

如何在Mathematica中打印n个前导零的整数?

我试着做以下事情:

Do[
  f1 = StringReplace[
    "obsxxxx.out", {"xxxx" -> ToString[i]}];
  Print[f1];
  ,
  {i, 200}];
Run Code Online (Sandbox Code Playgroud)

并获得

obs0001.out
obs0002.out
...
obs0010.out
...
obs0100.out
...
Run Code Online (Sandbox Code Playgroud)

等等.

我试过了:

ToString[Flatten[IntegerDigits[20, 10, 4]]]
Run Code Online (Sandbox Code Playgroud)

但我还有一份清单......

wolfram-mathematica

10
推荐指数
1
解决办法
2869
查看次数

g ++标准支持

我对此有点疑惑:Gcc 4.5在线手册---标准部分.

他们解释了这个

最初的ISO C++标准作为ISO标准(ISO/IEC 14882:1998)公布,并由2003年出版的技术勘误表(ISO/IEC 14882:2003)进行了修订.这些标准分别称为C++ 98和C++ 03.GCC实现了大部分C++ 98(导出是一个值得注意的例外)和C++ 03中的大多数更改.

但他们并不知道gcc是否支持'裸'98 C++或仅支持更正的C++ 03.在"C语言"部分,解释更清楚:

1999年,2004年和2007年发布的三份技术勘误更正了1999年ISO C标准中的错误.GCC不支持未修正的版本.

所以我的问题是:是否也是g ++的情况(不支持未经修正的标准)?

唯一的4个选项以选择克++标准然后-std=c++98,-std=gnu++98,-std=c++0x,和-std=gnu++0x.那是对的吗 ?

最后一个问题:那么-ansi选项是什么?它只用于C模式吗?

编辑:

-ansi -std = c89(对于C)或-std = c ++ 98的同义词

c++ standards gcc g++

9
推荐指数
1
解决办法
1万
查看次数

Matplotlib:Times New Roman看起来很大胆

出于某种原因,在我的mpl情节中使用Times New Roman时,它看起来很大胆.其他字体都可以.

这是一个最小的例子,结果(在Word文档中,与我期望的Times New Roman看起来相似).

import matplotlib as mpl
import matplotlib.pyplot as plt

with plt.style.context('word'):
  fig = plt.figure(1, figsize=(3.4, 2.1))
  ax1 = plt.subplot(111)
  ax1.plot([1,2,3,4,5], '+--')
  ax1.text(0.5, 3.5, r"Brown $\alpha + 12 \sum_ix$")
  ax1.text(0.5, 3, r"1.0 2.0")
  ax1.set_xlabel('normal 1.0 and math $1.0$')
  ax1.set_ylabel('Times New Roman')
  plt.tight_layout()
  fig.savefig('word.pdf')
Run Code Online (Sandbox Code Playgroud)

包含word样式表

backend: PS
text.usetex: False
font.family: serif
font.serif: Times New Roman
font.size: 11
axes.titlesize: 11
axes.labelsize: 11
Run Code Online (Sandbox Code Playgroud)

该图包含在文档中,其实际大小(3.4''乘2.1'').

正确找到了字体,它也在数学模式下工作(参见图中的alpha).看来这很大胆......

在此输入图像描述

python matplotlib

9
推荐指数
2
解决办法
3328
查看次数

查找Mathematica列表的第一个元素大于阈值

我想知道如何获得大于给定阈值的(已经订购的)列表的第一个元素.

我不太了解Mathematica中的列表操作功能,也许有人可以给我一个高效的技巧.

wolfram-mathematica

8
推荐指数
3
解决办法
5729
查看次数

如何对ElasticSearch执行SQL查询(使用org.elasticsearch.spark.sql格式)?

使用Spark 1.6.0和ES 5.0.0-alpha5,我试图在Spark中获取一些数据帧.我正在使用这个包

--packages org.elasticsearch:elasticsearch-spark-13_2.10:5.0.0-alpha5
Run Code Online (Sandbox Code Playgroud)

同

sqlContext.read.format("org.elasticsearch.spark.sql").option("es.nodes", "my_host").load("logstash-2016.10.10/my_type")
Run Code Online (Sandbox Code Playgroud)

我能做到printSchema并看到我的田地.

然而,任何这些都将永远挂起,没有例外,似乎没有任务提交给Spark

count, first, etc.
Run Code Online (Sandbox Code Playgroud)

我该怎么调试呢?任何提示将不胜感激!

编辑:我在docker容器中运行elasticsearch,我也可以通过Kibana成功连接并直接进行http rest查询.

elasticsearch apache-spark

7
推荐指数
1
解决办法
2229
查看次数

sql select*在确切的行数之间

我想知道我是否可以使用select语句检索行的确切位置.例如235到250之间的行.这可能吗?

谢谢,shashi

sql database

6
推荐指数
2
解决办法
4万
查看次数

模糊指针声明

我有一个问题,在某种程度上,我想,完全是微不足道的:那是什么(以及为什么)?

const float *(*const*)(int)
Run Code Online (Sandbox Code Playgroud)

我的理解是它是一个"指向一个函数的常量指针的指针,该函数将一个int作为参数并返回一个指向常量float的指针".

这是对的吗 ?

如何"精神上解析" (*const*)?特别是因为没有名字,起初我不知道从哪里开始.我认为"名称"的唯一可能性就是这样:*const *name因为其他组合无效(如果我是正确的),那么"name是指向常量指针的指针......".

这种推理有效吗?

谢谢 !

c c++

6
推荐指数
2
解决办法
462
查看次数

从文本文件中提取Ruby数据

我有一个相对较大的文本文件,其中包含数据块,如下所示:

ANALYSIS OF X SIGNAL, CASE: 1
TUNE X =  0.2561890123390808

    Line Frequency      Amplitude             Phase             Error         mx  my  ms  p

1 0.2561890123391E+00 0.204316425208E-01 0.164145385871E+03 0.00000000000E+00   1   0   0   0
2 0.2562865535359E+00 0.288712798671E-01 -.161563284233E+03 0.97541196785E-04   1   0   0   0
Run Code Online (Sandbox Code Playgroud)

(它们包含更多行,然后重复)

我想先提取后面的数值,TUNE X =然后在文本文件中输出.然后我想提取数值LINE FREQUENCY和AMPLITUDE作为一对值并输出到文件.

我的问题是:altough我可以做的东西moreorless使用简单REGEXP我不相信这是应该做正确的方式工作,我想一些建议或者代码的例子来说明我如何使用Ruby这样做有效.

ruby

6
推荐指数
1
解决办法
4237
查看次数

卡桑德拉读错了

tl; dr我解决了升级到Cassandra 3.2的问题.这个错误显然导致了这个问题.


我正在运行带有版本的Cassandra双节点集群[cqlsh 5.0.1 | Cassandra 3.0.1 | CQL spec 3.3.1 | Native protocol v4].

有一个表我无法阅读,我有以下错误:

cqlsh:kepler> select type from md_data limit 1;
Traceback (most recent call last):
  File "/local/chernals/dsc-cassandra-3.0.1/bin/cqlsh.py", line 1258, in perform_simple_statement
    result = future.result()
  File "/local/chernals/dsc-cassandra-3.0.1/bin/../lib/cassandra-driver-internal-only-3.0.0-6af642d.zip/cassandra-driver-3.0.0-6af642d/cassandra/cluster.py", line 3122, in result
    raise self._final_exception
ReadFailure: code=1300 [Replica(s) failed to execute read] message="Operation failed - received 0 responses and 1 failures" info={'failures': 1, 'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地阅读其他表格.

该表的架构是:

CREATE TABLE kepler.md_data …
Run Code Online (Sandbox Code Playgroud)

cassandra cqlsh

6
推荐指数
1
解决办法
3760
查看次数