这是关于容器的一个小问题,特别是数组.
我正在编写一个物理代码,主要操作一个大的(> 1 000 000)"粒子"集(double每个有6个坐标).我正在寻找最好的方法(在性能方面)来实现一个类,该类将包含这些数据的容器,并将为这些数据提供操作原语(例如实例化operator[]等).
如何使用此集合有一些限制:
第一个结论,因为对元素的访问基本上是通过逐个访问每个元素来完成的[],我认为我应该使用普通的动态数组.
我已经探讨了一些事情,我想对那些可以给我最好表现的人发表意见.
据我所知,使用动态分配的数组而不是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个双打的静态数组(这避免使用二维动态数组)我试着做以下事情:
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)
但我还有一份清单......
我对此有点疑惑: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的同义词
出于某种原因,在我的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).看来这很大胆......
我想知道如何获得大于给定阈值的(已经订购的)列表的第一个元素.
我不太了解Mathematica中的列表操作功能,也许有人可以给我一个高效的技巧.
使用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查询.
我想知道我是否可以使用select语句检索行的确切位置.例如235到250之间的行.这可能吗?
谢谢,shashi
我有一个问题,在某种程度上,我想,完全是微不足道的:那是什么(以及为什么)?
const float *(*const*)(int)
Run Code Online (Sandbox Code Playgroud)
我的理解是它是一个"指向一个函数的常量指针的指针,该函数将一个int作为参数并返回一个指向常量float的指针".
这是对的吗 ?
如何"精神上解析" (*const*)?特别是因为没有名字,起初我不知道从哪里开始.我认为"名称"的唯一可能性就是这样:*const *name因为其他组合无效(如果我是正确的),那么"name是指向常量指针的指针......".
这种推理有效吗?
谢谢 !
我有一个相对较大的文本文件,其中包含数据块,如下所示:
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这样做有效.
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)