小编0x2*_*207的帖子

切换语句可变参数模板扩展

请允许我考虑以下合成示例:

inline int fun2(int x) {
    return x;
}
inline int fun2(double x) {
    return 0;   
}
inline int fun2(float x) {
    return -1;   
}

int fun(const std::tuple<int,double,float>& t, std::size_t i) {
    switch(i) {
        case 0: return fun2(std::get<0>(t));
        case 1: return fun2(std::get<1>(t));
        case 2: return fun2(std::get<2>(t));
    }    
}
Run Code Online (Sandbox Code Playgroud)

问题是我应该如何将其扩展到一般情况

template<class... Args> int fun(const std::tuple<Args...>& t, std::size_t i) {
// ?
}
Run Code Online (Sandbox Code Playgroud)

保证这一点

  1. fun2可以很有趣
  2. 搜索复杂性不比O(log(i))差(对于大i).

众所周知,当足够大的交换机扩展时,优化器通常使用查找跳转表或编译时二进制搜索树.所以,我想保持这个属性影响大量项目的性能.

更新#3:我使用统一随机索引值重新测量性能:

                      1       10      20      100
@TartanLlama
    gcc               ~0      42.9235 44.7900 46.5233
    clang             10.2046 38.7656 …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

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

btrfs ioctl:从用户空间获取文件校验和

我想获得与特定文件相关的BTRFS校验和,但遗憾的是我没有找到合适的ioctl来执行此操作.有可能吗?如果是这样,怎么办?我需要存储的校验和,以尝试在类似于rsync行为的情况下减少CPU负载.

linux btrfs

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

TensorFlow:如何跳过损坏的数据

我正在玩 TensorFlow 1.0。我的输入数据是大量 jpeg 图像。其中一些由于不同的原因而损坏,我只想在输入时跳过它们。

图表的图像加载部分如下:

filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once(filename_list), capacity=1000, num_epochs=1)
whole_file_reader = tf.WholeFileReader()
_, image_binary = whole_file_reader.read(filename_queue)
image_tensor = tf.cast(tf.image.decode_jpeg(image_binary), tf.float32)
Run Code Online (Sandbox Code Playgroud)

模型运行部分照常:

with sv.managed_session() as sess:
        sess.run(init_local)
        sess.run(init_all)

        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord, sess=sess)

        try:
                while not coord.should_stop() and not sv.should_stop():
                        sess.run(accumulator)
        except tf.errors.OutOfRangeError:
                print('Done training -- epoch limit reached')
                #
        except Exception as e:
                # Report exceptions to the coordinator.
                coord.request_stop(e)
        finally:
                coord.request_stop()

        coord.request_stop()
        coord.join(threads)
Run Code Online (Sandbox Code Playgroud)

运行此代码时,我看到以下内容,但我无法弄清楚如何正确捕获此异常。

Traceback (most recent call last):
  File "/home/matwey/venv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1022, in _do_call …
Run Code Online (Sandbox Code Playgroud)

tensorflow

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

最大值:扩展嵌套求和

我有以下千里马代码:

m:sum(x[i],i,1,N)/N;
Run Code Online (Sandbox Code Playgroud)

然后我想计算 $m^2$。

m2:m^2, sumexpand;
Run Code Online (Sandbox Code Playgroud)

然后我得到双重求和:

sum(sum(x[i1]*x[i2],i1,1,N),i2,1,N)/N^2
Run Code Online (Sandbox Code Playgroud)

我想要实现的是将其扩展为两个总和。

第一个是sum(x[i]^2,i,1,N),第二个是rest over non-equal indices。我该怎么做?我应该如何使用 的任意权力来做到这一点m

maxima

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

TensorFlow:评估恢复图

我正在尝试从检查点恢复图形。检查点由tf.Supervisor. 有meta文件和检查点。

我试图实现的是从单独的应用程序加载这个图来运行一些操作(即恢复现有模型)。

我按照以下方式执行此操作(如此处所述:https : //www.tensorflow.org/api_docs/python/tf/train/import_meta_graph):

meta = 'path/to/file.meta'

my_graph = tf.Graph()
with my_graph.as_default():
        with tf.Session() as sess:
                saver = tf.train.import_meta_graph(meta)
                saver.restore(sess, tf.train.latest_checkpoint(os.path.dirname(meta)))
                op = my_graph.get_operation_by_name("op")
                print(sess.run(op))
Run Code Online (Sandbox Code Playgroud)

我看到的是None. 我希望看到的是一维张量。我my_graph使用 get_collection检查了对象,发现我的所有变量都需要op使用从检查点恢复的值正确初始化。我怎样才能弄清楚为什么没有正确评估操作?我真的被困在这里了。

以下代码:

print(sess.run(my_graph.get_operation_by_name("Variable_2")))
print(sess.run(my_graph.get_tensor_by_name("Variable_2:0")))
Run Code Online (Sandbox Code Playgroud)

印刷

None
4818800
Run Code Online (Sandbox Code Playgroud)

就好像一个操作和相应的变量之间没有联系。

tensorflow

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

Django:外键 on_delete SET_DEFAULT 行为

让我考虑以下两个模型:

class Policy(models.Model):
        name = models.SlugField(max_length=256, blank = False, unique = True)
def default_policy():
        return Policy.objects.get(name='default').pk
class Item(models.Model):
        policy = models.ForeignKey('Policy', on_delete=models.SET_DEFAULT, default=default_policy)
Run Code Online (Sandbox Code Playgroud)

除了一个操作外,一切都按预期工作。我仍然可以毫无例外地执行以下操作:

p = Policy.objects.get(name='default')
p.delete()
Run Code Online (Sandbox Code Playgroud)

这会产生孤立的Items,它们指的是“默认”Policy对象。不幸的是,此操作导致数据库中的完整性问题,因为现在有Item哪些 policy_id 列指的是Policy表的丢失记录。

我怎样才能防止这种情况发生?Policy当没有Items 指代它时删除“默认”对我来说是可以接受的。

django

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

如何正确对浮点对和求和

让我有两个浮点变量作为函数参数:

float fun(float x, float y) {
     // ...
}
Run Code Online (Sandbox Code Playgroud)

我想计算他们的总和。是否可以正确地将其与当前浮点舍入模式无关?

我的意思是以下。考虑以下表达式:

floorf(x+y)
Run Code Online (Sandbox Code Playgroud)

对于浮点数运算,某个整数n的函数参数(x + y)<n的精确值可能会四舍五入为最接近的整数n,然后floorf()函数将返回n而不是(n -1)。

c c++ floating-point

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