小编Jon*_*hen的帖子

MATLAB矢量化代码如何在"引擎盖下"工作?

我理解在MATLAB这样的语言中使用矢量化是如何通过消除维护循环变量的开销来加速代码的,但是矢量化实际上是如何在汇编/机器代码中进行的?我的意思是在某个地方仍然必须有一个循环,对吗?

matlab vectorization

10
推荐指数
2
解决办法
2090
查看次数

我为课堂写了这个汉明编码代码.为什么这么慢?

我为我的OS类写了这个:

#include <iostream>
#include <fstream>

//encodes a file using the (8,4) Hamming Code.
//usage : HammingEncode.out < inputFile > outputFile 
int main() {
    unsigned char const codebook[] = {0x00, 0x1E, 0x2D, 0x33, 0x4B, 0x55, 0x66, 0x78, 0x87, 0x99, 0xAA, 0xB4, 0xCC, 0xD2, 0xE1, 0xFF};
    unsigned char in, nextByte;
    unsigned char const leftMask = 0xF0, rightMask = 0x0F;

    in = std::cin.get();
    while (!std::cin.eof()) {
        nextByte = (in & leftMask) >> 4;
        std::cout << codebook[nextByte];
        nextByte = in & rightMask;
        std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ operating-system file hamming-code

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

在主线程中使用 KeyboardException 中断 Python 中的线程

我有几个类看起来或多或少是这样的:

import threading
import time

class Foo():
    def __init__(self, interval, callbacks):
        self.thread = threading.Thread(target=self.loop)
        self.interval = interval
        self.thread_stop = threading.Event()
        self.callbacks = callbacks

    def loop():
        while not self.thread_stop.is_set():
            #do some stuff...
            for callback in self.callbacks():
                callback()
            time.sleep(self.interval)

    def start(self):
        self.thread.start()

    def kill(self):
        self.thread_stop.set()
Run Code Online (Sandbox Code Playgroud)

我在我的主线程中使用的是这样的:

interval = someinterval
callbacks = [some callbacks]

f = Foo(interval, callbacks)

try:
    f.start()
except KeyboardInterrupt:
    f.kill()
    raise
Run Code Online (Sandbox Code Playgroud)

在所有回调完成后,但在循环重复之前,我想要一个 KeyboardInterrupt 来终止线程。目前它们被忽略,我不得不求助于终止程序运行的终端进程。

我从这篇文章中看到了使用 threading.Event 的想法,但看起来我做错了,这让这个项目的工作变得非常麻烦。

我不知道它是否相关,但是我从 Internet 传递访问数据的回调并大量使用重试装饰器来处理不可靠的连接。


编辑

在大家的帮助下,循环现在在 Foo 中看起来像这样:

    def thread_loop(self):
        while not …
Run Code Online (Sandbox Code Playgroud)

python multithreading

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

为什么我不能在迭代HashMap时解构这个元组?

我只是在学习生锈,正在开展一项简单的/ r/dailyprogrammer任务.这是一些代码:

type ToDoList = HashMap<String, bool>;

fn print(list: &ToDoList) {
    let mut max_len: usize = 0;
    for (item, _) in list.iter() {
        max_len = max(max_len, item.len());
    }
    let end = format!("+---{}-+", 
        iter::repeat("-").take(max_len).collect::<String>());

    println!("{}", end);
    for (item, done) in list.iter() {
        let line = format!("| {0} {1}{2} |", 
            if done {"?"} else {"?"}, 
            item,
            iter::repeat("-")
                .take(max_len - item.len())
                .collect::<String>()
        );
        println!("{:?}", (item, done));
    }
    println!("{}", end);
}
Run Code Online (Sandbox Code Playgroud)

我从rustc得到这个错误:

error: type mismatch resolving `<std::collections::hash::map::Iter<'_,
 collections::string::String, bool> as core::iter::Iterator>::Item ==
 (_, bool)`: …
Run Code Online (Sandbox Code Playgroud)

rust

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