我还没有参与共享指针..我只知道这个概念.我正在尝试调试以下c ++类中的函数,该类存储XML文件的数据(通过xerces库读入).
// header file
class ParamNode;
typedef boost::shared_ptr<ParamNode> PtrParamNode;
class ParamNode : public boost::enable_shared_from_this<ParamNode> {
public:
...
typedef enum { DEFAULT, EX, PASS, INSERT, APPEND } ActionType;
bool hasChildren() const;
PtrParamNode GetChildren();
PtrParamNode Get(const std::string& name, ActionType = DEFAULT );
protected:
....
ActionType defaultAction_;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我正在调试一段代码,其中我有一个指向该类的指针的实例ParamNode,并且它被调用paramNode_
PtrParamNode paramNode_;
// read xml file with xerces
paramNode_ = xerces->CreateParamNodeInstance();
// now, the xml data is stored in paramNode_.
std::string probGeo;
// this works in the code, …Run Code Online (Sandbox Code Playgroud) 给定以下NumPy数组,
> a = array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
它很简单,可以改变一行,
> shuffle(a[0])
> a
array([[4, 2, 1, 3, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
是否可以使用索引表示法独立地对每个行进行洗牌?或者你必须迭代数组.我有类似的想法,
> numpy.shuffle(a[:])
> a
array([[4, 2, 3, 5, 1],[3, 1, 4, 5, 2],[4, 2, 1, 3, 5]]) # Not the real output
Run Code Online (Sandbox Code Playgroud)
虽然这显然不起作用.
我已经测试了一个使用numpy(第20/57页)在这个讲座 [pytables]中演示的示例.
据说,这a[:,1].sum()需要9.3毫秒,而a[1,:].sum()只需要72美元.
我试图重现它,但没有这样做.我错误地测量了吗?或者自2010年以来NumPy的情况发生了变化?
$ python2 -m timeit -n1000 --setup \
'import numpy as np; a = np.random.randn(4000,4000);' 'a[:,1].sum()'
1000 loops, best of 3: 16.5 usec per loop
$ python2 -m timeit -n1000 --setup \
'import numpy as np; a = np.random.randn(4000,4000);' 'a[1,:].sum()'
1000 loops, best of 3: 13.8 usec per loop
$ python2 --version
Python 2.7.7
$ python2 -c 'import numpy; print numpy.version.version'
1.8.1
Run Code Online (Sandbox Code Playgroud)
虽然我可以测量第二个版本的好处(据说因为numpy使用C风格的行排序而减少了缓存未命中),但我没有看到pytables贡献者所说的那么大的差异.
此外,当使用列V行求和时,似乎我看不到更多缓存未命中.
编辑
到目前为止,我的洞察力是我timeit以错误的方式使用模块.使用相同数组(或数组的行/列)的重复运行几乎肯定会被缓存(我有32KiBL1数据缓存,所以一条线适合内部:) 4000 * …
没有if子句有没有办法做到以下几点?
我正在使用pupynere读取一组netcdf文件,并希望构建一个带有numpy附加的数组.有时输入数据是多维的(见下面的变量"a"),有时是一维("b"),但第一维中的元素数总是相同的(下例中的"9").
> import numpy as np
> a = np.arange(27).reshape(3,9)
> b = np.arange(9)
> a.shape
(3, 9)
> b.shape
(9,)
Run Code Online (Sandbox Code Playgroud)
这按预期工作:
> np.append(a,a, axis=0)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, …Run Code Online (Sandbox Code Playgroud) 在编写python代码(主要是numpy + matplotlib)时,我通常只需在vim中键入代码并运行程序来测试它:
python2 foo.py
偶尔,如果这还不够,我需要更彻底地检查问题,我只需在ipython中启动程序:
ipython -pylab foo.py然后检查变量,测试一些命令等等.我喜欢ipython,因为选项卡完成和bash命令的可用性.
这对我来说效果很好,但现在我的程序变得更大,包括许多子程序(在多个文件中).该ipython方法不再起作用,因为它总是运行完整的代码直到foo.py它落入pylab shell的结尾.我想要做的是,停止在子程序中的给定行执行(可能在另一个文件中)并检查那里的变量.即设置一个断开点,在该断点处pylab shell开始.
是否有一种简单的方法来适应我ipython的工作方式?例如,停在一条线上bar.py
ipython -pylab --stop-at bar.py:423 foo.py
Run Code Online (Sandbox Code Playgroud)
或者,停在子程序名称中 bar.py
ipython -pylab --stop-at bar.py:subroutine-name foo.py
Run Code Online (Sandbox Code Playgroud) 我正在使用pupynere接口(linux)读取一堆netcdf文件.以下代码导致mmap错误:
import numpy as np
import os, glob
from pupynere import NetCDFFile as nc
alts = []
vals = []
path='coll_mip'
filter='*.nc'
for infile in glob.glob(os.path.join(path, filter)):
curData = nc(infile,'r')
vals.append(curData.variables['O3.MIXING.RATIO'][:])
alts.append(curData.variables['ALTITUDE'][:])
curData.close()
Run Code Online (Sandbox Code Playgroud)
错误:
$ python2.7 /mnt/grid/src/profile/contra.py
Traceback (most recent call last):
File "/mnt/grid/src/profile/contra.py", line 15, in <module>
File "/usr/lib/python2.7/site-packages/pupynere-1.0.13-py2.7.egg/pupynere.py", line 159, in __init__
File "/usr/lib/python2.7/site-packages/pupynere-1.0.13-py2.7.egg/pupynere.py", line 386, in _read
File "/usr/lib/python2.7/site-packages/pupynere-1.0.13-py2.7.egg/pupynere.py", line 446, in _read_var_array
mmap.error: [Errno 24] Too many open files
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我评论其中一个append …
numpy ×5
python ×5
debugging ×2
performance ×2
append ×1
boost ×1
c++ ×1
gdb ×1
linux ×1
list ×1
matplotlib ×1
mmap ×1
netcdf ×1
random ×1
shared-ptr ×1