小编Pet*_*ter的帖子

Scipy:生成 NxN 离散余弦矩阵

使用 scipy,是否有一种简单的方法来模拟 MATLABdctmtx函数的行为,该函数为某些给定的 N 返回 NxN DCT 矩阵?有scipy.fftpack.dctn但仅适用于 DCT。如果我不想使用除 scipy 之外的其他依赖项,我是否必须从头开始实现?

python dct scipy

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

numpy.linalg.pinv 的 rcond 参数有什么作用?

在查找如何计算numpy(1.15.4) 中的伪逆时,我注意到numpy.linalg.pinv有一个参数rcond,其描述如下:

\n\n
\n

rcond : (\xe2\x80\xa6) 类似浮点数的数组

\n\n

小奇异值的截止。小于 rcond * Maximum_singular_value(同样,以模数表示)的奇异值(以模数表示)\n 将设置为零。针对矩阵堆栈的广播

\n
\n\n

根据我的理解,如果rcond是一个标量浮点,则输出pinv小于的所有条目\nrcond应该设置为零(这将非常有用),但这不是发生的情况,例如:

\n\n
>>> A = np.array([[ 0., 0.3, 1., 0.],\n                  [ 0., 0.4, -0.3, 0.],\n                  [ 0., 1., -0.1, 0.]])\n\n>>> np.linalg.pinv(A, rcond=1e-3)\n\narray([[ 8.31963531e-17, -4.52584594e-17, -5.09901252e-17],\n       [ 1.82668420e-01,  3.39032588e-01,  8.09586439e-01],\n       [ 8.95805933e-01, -2.97384188e-01, -1.49788105e-01],\n       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]])\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个参数实际上有什么作用?我只能通过再次迭代整个输出矩阵来获得我真正想要的行为吗?

\n

python numpy

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

x86实模式调用不保存返回地址

我正在尝试编写一个实模式引导加载程序,但我目前在尝试启用 A20 线时遇到了问题。到目前为止,这是我的代码,我正在使用 NASM 进行组装:

[bits 16]

[global _start]

jmp _start

bios_print:
 lodsb
 test al, al
 jz bios_print_done
 mov ah, 0x0E
 mov bh, 0
 int 0x10
 jmp bios_print

bios_print_done:
 ret

a20_is_enabled:
 push ds
 push si
 push es
 push di

 xor ax, ax
 mov ds, ax
 mov si, BOOT_ID_OFFS

 mov ax, BOOT_ID_OFFS_PLUS_1MB_SEGM
 mov es, ax
 mov di, BOOT_ID_OFFS_PLUS_1MB_OFFS

 cmp word [es:di], BOOT_ID

 mov ax, 1
 jne a20_is_enabled_done

 mov ax, word [ds:si]
 xor ax, ax
 mov [ds:si], ax

 cmp word [es:di], BOOT_ID …
Run Code Online (Sandbox Code Playgroud)

x86 assembly real-mode bootloader x86-16

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

如何在 GNU 汇编器中使用 ins 指令

如何ins在 GNU 汇编器中使用 x86指令?指令参考建议的语法INS m8/16/32, DX,例如m16(我假设)是任何 16 位通用寄存器,其唯一目的是表示是否应该读取字节/字/双字,对吗?

现在,不幸的是,as拒绝ins %ax,%dxError: operand type mismatch for 'ins',这是为什么呢?

作为记录,我知道我可以简单地使用insb等,但我通过 C++ 程序中的内联汇编调用此指令,要读取的输入的大小取决于模板参数(编译时的字符串处理不是很实际的)。

编辑:这是我现在所拥有的,供参考(我不太喜欢宏)

#define INS(T) \
  __asm__ __volatile__("repne \n\t" \
                       "ins" T \
                       : "=D" (dest), "=c" (count) \
                       : "d" (port), "0" (dest), "1" (count) \
                       : "memory", "cc")

template<typename T>
void ins(uint16_t port, uint32_t dest, uint32_t count);

template<>
void ins<uint8_t>(uint16_t port, uint32_t dest, uint32_t count)
{ INS("b"); } …
Run Code Online (Sandbox Code Playgroud)

x86 g++ inline-assembly att ioports

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

在有序二叉树遍历期间避免列表串联

Haskell初学者在这里:二叉树的中序遍历很简单,例如:

data IntegerTree = Leaf Integer
                 | Node IntegerTree Integer IntegerTree

inorder :: IntegerTree -> [Integer]
inorder (Leaf n)     = [n]
inorder (Node l n r) = inorder l ++ [n] ++ inorder r
Run Code Online (Sandbox Code Playgroud)

然而,在我看来,必须有一个更有效的实现。由于列表是单链表,串联inorder l[n]似乎浪费,特别是因为这种工作是为一棵大树进行多次。我可以通过以不同的方式编写相同的函数来避免这个问题吗?

我最初是在尝试解决以类似方式构建移动列表的河内塔难题时考虑到这一点的,我希望可以使用类似的递归算法解决许多问题。

binary-tree haskell

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

haskell初始累加器'null'值

我有一个看似简单的Haskell问题,而且由于我的知识有限,我不确定要搜索哪些术语才能解决它.

我试图解决99个Haskell问题中的问题8(从列表中删除连续的重复项),这就是我想出的:

compress :: (Eq a) => [a] -> [a]
compress list = compress' list ???
  where
    compress' [] _ = []
    compress' (x:xs) last
      | x == last = compress xs last
      | otherwise = x : compress xs x
Run Code Online (Sandbox Code Playgroud)

'???' 只是一个占位符,这是我不确定该怎么做的地方.我认为片段的工作方式应该足够清楚,"last"是一种累加器,用于检查元素是否与之​​前的元素重复.现在,在这种情况下,我可以给出"最后"的初始值吗?(在我想的大多数OO语言中类似于'null'的东西).

编辑:Tikhon的答案有效,但是我刚刚意识到我在原帖中犯了一个错误,压缩'应该递归调用自己而不是压缩.因此,对我的问题的"琐碎"解决方案现在是:

compress :: (Eq a) => [a] -> [a]
compress list = compress' list Nothing
  where
    compress' [] _ = []
    compress' (x:xs) Nothing = x : compress' xs (Just x)
    compress' (x:xs) (Just last)
      | x …
Run Code Online (Sandbox Code Playgroud)

haskell

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

C++ 11多线程:Valgrind未初始化的值警告

我使用gcc 8.2.1在Linux下编译了以下虚拟程序:

#include <iostream>
#include <mutex>
#include <thread>

struct Foo
{
  void start() {
    thread = std::thread(&Foo::run, this);
  }

  void stop() {
    mutex.lock();
    done = true;
    mutex.unlock();

    thread.join();
  }

  void run() {
    bool tmp;

    for (;;) {
      mutex.lock();
      tmp = done;
      mutex.unlock();

      if (tmp)
        break;
    }
  }

  std::thread thread;
  std::mutex mutex;
  bool done;
};

int main()
{
  Foo foo;

  std::cout << "starting...\n";
  foo.start();

  std::cout << "stopping...\n";
  foo.stop();

  std::cout << "done\n";
}
Run Code Online (Sandbox Code Playgroud)

如果我随后在valgrind 3.14.0下运行它,我会收到以下警告:

==30060== Thread 2:
==30060== Conditional jump or …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading valgrind c++11

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

Fortran 指针赋值,“=&gt;”和“=”的区别

我努力理解的不同的行为=>=使用Fortran 95即分配一个指针到另一个时说,我有一个导出数据类型foo,那么,什么是在下面的代码片段,它们是等价的最后两行之间的区别?

type(foo), target :: f
type(foo), pointer :: p1, p2

f = foo(...)
p1 => foo

p2 => p1
p2 = p1
Run Code Online (Sandbox Code Playgroud)

fortran pointers

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

解构`Maybe (a, b)`

对我上一个问题的跟进。我正在学习 Brent Yorgey 的 Haskell 课程,我正在尝试解决一个练习,该练习要求我们Applicative为以下类型创建一个实例:

newtype Parser a = Parser { runParser :: String -> Maybe (a, String) }
Run Code Online (Sandbox Code Playgroud)

runParser解析一个字符串并返回一个标记和剩余的字符串。p1 <*> p2在这种情况下,应该将生成的函数应用于生成runParser p1的令牌runParser p2(应用于运行后字符串的左侧runParser p1)。

到目前为止,我有:

(Parser { runParser = run }) <*> (Parser { runParser = run' }) = Parser run''
  where run'' s = (first <$> f) <*> (s' >>= run')
          where f = fst <$> run s
                s' = snd <$> run s …
Run Code Online (Sandbox Code Playgroud)

haskell

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

哪些类型可以转换为 std::any?

在编写 clang 插件时,我注意到类型的对象llvm::cl::opt<T>不可转换为std::any,即以下代码段无法编译:

#include <any>
#include <string>

#include "llvm/Support/CommandLine.h"

int main()
{
  llvm::cl::opt<std::string> opt("o");
  std::any opt_any = opt; // doesn't work!
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么在这个特定实例中这是不可能的,以及类型必须满足什么标准才能转换为std::any.

c++ llvm c++17

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

将 `lookup` 返回的 `Nothing` 映射到默认值

假设我有一个l类型列表[(Int, Integer)],其中每个元组中的第一个元素是i范围0to 中的(唯一)索引n,每个元组中的第二个元素是一个关联值v

我想将此列表“扩展”为具有长度的l'类型列表,以便所有in和if is not in 。[Integer]10l !! i == v(i,v)ll !! j == 0(j,_)l

IE: [(1,10),(6,7)] => [0,10,0,0,0,0,7,0,0,0]

我不知道该怎么做,我试过:

map (\i -> lookup i l) [0..n]
Run Code Online (Sandbox Code Playgroud)

除了结果是一个Maybe的列表之外,这是有效的。一个明显的解决方案是:

integerOrZero :: Maybe Integer -> Integer                                        
integerOrZero Nothing  = 0                                                       
integerOrZero (Just n) = n    
Run Code Online (Sandbox Code Playgroud)

进而:

map integerOrZero $ map (\i -> lookup i l) [0..n]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种更简单的方法(可能是单行)来编写这个“默认查找”。我想mayMaybe在这里不起作用。 …

haskell

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