我正在从Java转向C++,并且对语言的灵活性感到有些困惑.有一点是存储对象的方法有三种:指针,引用和标量(如果我理解正确,则存储对象本身).
我倾向于尽可能使用引用,因为它尽可能接近Java.在某些情况下,例如派生属性的getter,这是不可能的:
MyType &MyClass::getSomeAttribute() {
MyType t;
return t;
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为t只存在于范围内,getSomeAttribute()并且如果我返回对它的引用,它将在客户端可以使用之前指出它.
因此,我有两个选择:
返回指针看起来像这样:
MyType *MyClass::getSomeAttribute() {
MyType *t = new MyType;
return t;
}
Run Code Online (Sandbox Code Playgroud)
这样做,但客户端必须检查此指针NULL才能确定,这是引用不必要的.另一个问题是调用者必须确保t解除分配,如果我可以避免它,我宁愿不处理它.
另一种方法是返回对象本身(标量):
MyType MyClass::getSomeAttribute() {
MyType t;
return t;
}
Run Code Online (Sandbox Code Playgroud)
这非常简单,正是我在这种情况下想要的东西:感觉就像一个引用,它不能为空.如果对象超出客户端代码的范围,则会将其删除.非常方便.但是,我很少看到有人这样做,这有什么原因吗?如果我返回标量而不是指针或引用,是否存在某种性能问题?
处理这个问题最常见/最优雅的方法是什么?
绘制一个集团图
import networkx as nx
....
nx.draw(G, layout=nx.spring_layout(G))
Run Code Online (Sandbox Code Playgroud)
产生如下图:

显然,需要增加节点之间的间隔(例如,边缘长度).我用谷歌搜索了这个,并在这里找到了这个建议:
对于某些布局算法,存在可能有帮助的"缩放"参数.例如
在1中:将networkx导入为nx
在2:G = nx.path_graph(4)
在[3]中:pos = nx.spring_layout(G)#default to scale = 1
在[4]中:nx.draw(G,pos)
在[5]中:pos = nx.spring_layout(G,scale = 2)#所有节点之间的双倍距离
在[6]中:nx.draw(G,pos)
但是,该scale参数似乎没有任何影响.
获得更好绘图的正确方法是什么?
对于使用Boost.Python的项目(请参阅此另一个问题),我需要包含例如的Python开发头文件pyconfig.h.
这些显然是从我的系统中丢失的.我通过Homebrew安装了Python 3:
cls ~ $ brew info python3
python3: stable 3.3.0
http://www.python.org/
Depends on: pkg-config, readline, sqlite, gdbm
/usr/local/Cellar/python3/3.2.3 (4420 files, 78M)
/usr/local/Cellar/python3/3.3.0 (4843 files, 93M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/python3.rb
Run Code Online (Sandbox Code Playgroud)
我更喜欢通过Homebrew获取标题,但我找不到它们的包.
cls ~ $ brew search python-dev
No formula found for "python-dev". Searching open pull requests...
Run Code Online (Sandbox Code Playgroud)
我有哪些选择来安装这些标头?有自制软件包吗?
我只是尝试用GCC和-fsanitize=address旗帜进行编译.当我运行我的程序时,地址清理程序发现了一个缺陷,但堆栈跟踪没有帮助.如何配置它以使其指向我需要查看的源代码位置?
=================================================================
==32415== ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6006004b38a0 at pc 0x10b136d5c bp 0x7fff54b8e5d0 sp 0x7fff54b8e5c8
WRITE of size 8 at 0x6006004b38a0 thread T0
#0 0x10b136d5b (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c6d5b)
#1 0x10b136e0c (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c6e0c)
#2 0x10b138ef5 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c8ef5)
#3 0x10b137a2e (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c7a2e)
#4 0x10b13acf2 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000cacf2)
#5 0x10b253647 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001e3647)
#6 0x10b24ee55 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001dee55)
#7 0x10b237108 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c7108)
#8 0x10b237c17 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c7c17)
#9 0x10b2385c9 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c85c9)
#10 0x10b23f659 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001cf659)
#11 0x10b254951 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001e4951)
#12 0x10b24fbeb (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001dfbeb)
#13 0x10b23dc38 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001cdc38)
#14 0x10b229d28 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001b9d28)
#15 0x10b229bda (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001b9bda)
#16 0x7fff8b7785fc (/usr/lib/system/libdyld.dylib+0x35fc)
#17 0x2
0x6006004b38a0 …Run Code Online (Sandbox Code Playgroud) IPython控制台打印带有换行符的元素列表,以便每个元素都显示在自己的行中.这通常是一个功能,但在我的情况下它是一个错误:我需要复制和粘贴长列表,所以我需要一个紧凑的表示.我怎样才能做到这一点?
使用Cython,我正在开发一个扩展模块,它将构建为.so文件.然后我使用IPython测试它.在开发过程中,我经常需要进行更改和重建.我还需要退出IPython shell并重新输入所有命令.重新导入模块
import imp
imp.reload(Extension)
Run Code Online (Sandbox Code Playgroud)
不起作用,代码不更新.有没有办法让我在重建模块后避免重启IPython shell?
我已经在Stackoverflow上读到,没有一个STL容器对于写入是线程安全的.但这在实践中意味着什么?这是否意味着我应该将可写数据存储在普通数组中?
我希望并发调用std::vector::push_back(element)可能会导致数据结构不一致,因为它可能需要调整向量的大小.但是这样的情况呢,不涉及调整大小:
1)使用数组:
int data[n];
// initialize values here...
#pragma omp parallel for
for (int i = 0; i < n; ++i) {
data[i] += func(i);
}
Run Code Online (Sandbox Code Playgroud)
2)使用`std :: vector``:
std::vector<int> data;
data.resize(n);
// initialize values here...
#pragma omp parallel for
for (int i = 0; i < n; ++i) {
data[i] += func(i);
}
Run Code Online (Sandbox Code Playgroud)
第一个实现是否真的比第二个更好a)在线程安全方面和b)在性能方面?我更喜欢使用std :: vector,因为我对C风格的数组不太熟悉.
编辑:我删除了#pragma omp atomic update保护写.
英特尔至强融核协处理器是否可用作并行平台,是否需要英特尔Composer XE编译器的许可证,或者是否有替代编译器?
hardware compiler-construction parallel-processing intel intel-mic
我想比较一组得分(score)的分布,按一些类别(centrality)分组并用其他一些()着色model.我用seaborn试过以下内容:
plt.figure(figsize=(14,6))
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1))
seaborn.despine(offset=10, trim=True)
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight")
Run Code Online (Sandbox Code Playgroud)
我对这个情节有一些问题:
model值original是特殊的,因为所有其他分布应该与分布进行比较original.这应该在视图中直观地反映出来.我可以制作original每组的第一个盒子吗?我可以以某种方式偏移或标记它吗?是否有可能在每个original分布的中位数和一组方框中绘制一条水平线?score非常小,如何正确缩放y轴来显示它们?编辑:
这是一个带有对数刻度的y轴的示例 - 也不是理想的.为什么有些盒子似乎在低端切断?
在 Jupyter notebook 中使用 PySpark,DataFrame.show与 Pandas DataFrames 的显示方式相比,Spark 的输出技术含量较低。我想“嗯,它可以完成工作”,直到我得到这个:
输出未调整为笔记本的宽度,因此线条以丑陋的方式环绕。有没有办法自定义这个?更好的是,有没有办法获得 Pandas 风格的输出(pandas.DataFrame不明显转换为)?
python ×6
c++ ×3
ipython ×2
apache-spark ×1
boxplot ×1
cython ×1
gcc ×1
graph ×1
hardware ×1
header ×1
homebrew ×1
intel ×1
intel-mic ×1
jupyter ×1
list ×1
macos ×1
matplotlib ×1
memory ×1
networkx ×1
openmp ×1
pandas ×1
plot ×1
pointers ×1
pyspark ×1
python-3.x ×1
reference ×1
scalar ×1
seaborn ×1
stack-trace ×1
stl ×1