小编san*_*san的帖子

来自cStringIO对象的Numpy数组并避免复制

这样可以更好地理解事物.这不是我需要解决的实际问题.一个cstringIO对象应该模拟一个字符串,文件以及一行上的迭代器.它是否也模拟缓冲区?在任何情况下,理想情况下,应该能够构建如下的numpy数组

import numpy as np
import cstringIO

c = cStringIO.StringIO('\x01\x00\x00\x00\x01\x00\x00\x00')

#Trying the iterartor abstraction
b = np.fromiter(c,int)
# The above fails with: ValueError: setting an array element with a sequence.

#Trying the file abstraction
b = np.fromfile(c,int)
# The above fails with: IOError: first argument must be an open file

#Trying the sequence abstraction
b = np.array(c, int)
# The above fails with: TypeError: long() argument must be a string or a number 

#Trying the string abstraction
b …
Run Code Online (Sandbox Code Playgroud)

python numpy stringio

5
推荐指数
1
解决办法
1587
查看次数

什么是适用于多维数组的高效,类型推断语言的示例

我不太关心垃圾收集,如果存在它应该是可选的.该语言D适合该法案,但我正在探索其他选择.令我感到惊讶的是,这似乎是语言中人烟稀少的地方.如果可能的话,我想要能以80%的速度运行东西的东西.

我也希望这种语言能够很好地支持多核.不一定是通过线程,而是任何不涉及大量复制的东西.例如,GNU的并行模式对libstdc++我来说是一个相当不错的抽象,但在给出预先烘焙的数组原语方面有点弱(这不是一个抱怨,给出数组原语不是它的工作).

我怀疑我驾驶的是一种OCaMl类似的语言:

  1. 对多维数组的良好支持,
  2. 没有(或可选)垃圾收集,
  3. 用于阵列密集型代码的并行编程原语,
  4. 方便的C FFI,
  5. 并且有合理的机会以80%的C速度运行.

我不确定使用什么标签,欢迎提出建议.我也想把它变成一个wiki,但不知道怎么做.我听说过,Felix但不知道这是否合适.

ocaml type-inference d

5
推荐指数
1
解决办法
541
查看次数

加速Numpy阵列上的循环

在我的代码中,我有for循环,它在多维numpy数组上进行索引,并使用在每次迭代时获得的子数组进行一些操作.看起来像这样

for sub in Arr:
  #do stuff using sub
Run Code Online (Sandbox Code Playgroud)

现在使用的东西sub是完全矢量化的,所以它应该是高效的.另一方面,这个循环迭代大约~10^5 时间并且是瓶颈.你是否认为我会通过将这部分卸载到C来获得改进.我有点不愿意这样做,因为do stuff using sub使用广播,切片,智能索引技巧,这些技巧在C语言中写得很乏味.我也欢迎提出想法和建议关于如何在将计算卸载到C时处理广播,切片,智能索引.

python for-loop numpy

4
推荐指数
1
解决办法
2052
查看次数

CRTP与"派生"中函数的直接实现

我想要更好地了解CRTP.到目前为止,我的理解是它允许人们编写如下的函数.

template <class T>
void foo(Base<T> x ) { x.do_stuff() }
Run Code Online (Sandbox Code Playgroud)

现在,根据x传递给函数的实际编译时派生对象,foo()它将执行不同的操作.

但是,我可以Derived从非虚拟但被覆盖的派生类Base和掩盖/阴影它.因此,当使用CRTP完全正确时,更确切地说是最简单的非平凡示例,它显示了CRTP优于阴影/屏蔽的优势.do_stuff()Derived::do_stuff

c++ templates crtp

4
推荐指数
1
解决办法
673
查看次数

Cython化for循环生成器的循环

我有Python代码,有很多循环使用Python生成器的数据.有些还会产生处理过的数据.这是一个瓶颈,我想加速这部分,并考虑使用Cython.

什么是处理发电机和产量的推荐方法.我想要

  • 将Python生成器转换为Cython而无需数据副本
  • 使Cython for循环消耗Python生成器生成的数据
  • 产量数据像发电机

我猜这是一个常见的用例,推荐的方法是什么.

python for-loop generator cython coroutine

4
推荐指数
1
解决办法
2503
查看次数

不要求排序需要严格的弱排序吗?

来自http://stdcxx.apache.org/doc/stdlibref/less-equal.html

-

您可以将less_equal对象传递给任何需要二进制函数的算法.例如,sort()算法可以接受二进制函数作为备用比较对象来对序列进行排序.less_equal将以下列方式用于该算法:

vector<int> vec1;
sort(vec1.begin(), vec1.end(),less_equal<int>());
Run Code Online (Sandbox Code Playgroud)

-

现在我很困惑,上面的文档是否正确?

c++ stl equality equivalence strict-weak-ordering

3
推荐指数
1
解决办法
1319
查看次数

使用 std::accumulate 以最佳精度添加浮点数

我想将总数累加为双精度而不是浮点数。

vector<float> v;
....
double total  = std::accumulate(v.begin(),
                                v.end(),
                                static_cast<double>(0.0));
//This compiles but I am not sure it is doing what I want
Run Code Online (Sandbox Code Playgroud)

...

double total_ = std::accumulate<double>(v.begin(),
                                        v.end(),
                                        static_cast<double>(0.0)
                                       );

// This doesnt compile, which leads me to believe the first accumulate
// is coercing the double(0.0) back to float.
Run Code Online (Sandbox Code Playgroud)

有没有一种STL惯用且简洁的写法

double total = 0.0;
for (int i = 0; i < v.size(); ++i) {
  total += v[i];
}
Run Code Online (Sandbox Code Playgroud)

仅使用标准库。

我知道这不足以保持精度。

c++ stl

2
推荐指数
1
解决办法
3557
查看次数