小编Nic*_*mer的帖子

Numpy:如何逐个乘以两个向量,shape(n,1)和(n,)?

如果它们都具有相同的形状,例如两个(n,1)或两个(n,),则两个矢量的元素相乘是没有问题的.但是,如果一个向量具有形状(n,1)而另一个向量具有(n,),则*-operator返回一些有趣的东西.

a = np.ones((3,1))
b = np.ones((3,))
print a * b
Run Code Online (Sandbox Code Playgroud)

得到的nxn矩阵包含A_ {i,j} = a_i*b_j.

我怎样才能实现elementwise乘法的ab呢?

python arrays numpy

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

如何最好地将方法传递到同一类的方法中

我有这个C++类,这是一个很复杂的方法compute,我想用"计算内核",一个同一类的方法.我想我会做一些事情

class test {
int classVar_ = 42;

int compute_add(int a, int b)
{
   compute(int a, int b, this->add_())
}

int compute_mult(int a, int b)
{
   compute(int a, int b, this->mult_())
}


int compute_(int a, int b, "pass in add or multiply as f()")
{
   int c=0;
   // Some complex loops {
   c += f(a,b)
   // }
   return c;
}

int add_(int a, int b){a+b+classVar_;}
int multiply_(int a, int b){a*b+classVar_;}
...

}
Run Code Online (Sandbox Code Playgroud)

但我不确定我会怎样传递add或传递multiply.这种方法的另一种方法是传递ENUM …

c++ member-function-pointers

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

__float128需要什么样的printf精度才能丢失信息?

我正在尝试使用libquadmath打印__float128,例如:

quadmath_snprintf(s, sizeof(s), "%.30Qg", f);
Run Code Online (Sandbox Code Playgroud)

有以下三个constaints:

  1. 输出必须符合以下生产:

     number = [ minus ] int [ frac ] [ exp ]
    
     decimal-point = %x2E       ; .
    
     digit1-9 = %x31-39         ; 1-9
    
     e = %x65 / %x45            ; e E
    
     exp = e [ minus / plus ] 1*DIGIT
    
     frac = decimal-point 1*DIGIT
    
     int = zero / ( digit1-9 *DIGIT )
    
     minus = %x2D               ; -
    
     plus = %x2B                ; +
    
     zero = %x30                ; 0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 给定任何输入__float128"i"已经打印到匹配上述生产"s"的字符串,然后"s"被扫描回到__float128"j" - "i"必须与"j"按位相同 - 即不应丢失任何信息.对于至少某些值,这是不可能的(NaN,Infinity),这些值的完整列表是什么?

  3. 应该没有其他字符串满足上述两个标准,比候选人短.

是否有满足上述要求的quadmath_snprintf格式字符串(尽可能为1,3和2)?如果是这样的话是什么? …

c floating-point gcc glibc

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

如何最好地对 SciPy 稀疏矩阵进行行缩放?

我有一个 SciPy 稀疏矩阵A(比如说 CSR 格式)和一个v匹配长度的向量。

行缩放的最佳方式是什么,即 A执行?vdiag(v) * A

python scipy sparse-matrix

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

在python代码中用换行符替换分号

我想解析包含;用于分隔命令的分号的Python代码,并生成用换行替换它们的代码\n.例如,来自

def main():
    a = "a;b"; return a
Run Code Online (Sandbox Code Playgroud)

我想生产

def main():
    a = "a;b"
    return a
Run Code Online (Sandbox Code Playgroud)

任何提示?

python parsing compilation

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

Numpy int数组:查找多个目标int的索引

我有一个大的numpy数组(dtype=int)和一组数字,我想在该数组中找到,例如,

import numpy as np
values = np.array([1, 2, 3, 1, 2, 4, 5, 6, 3, 2, 1])
searchvals = [3, 1]
# result = [0, 2, 3, 8, 10]
Run Code Online (Sandbox Code Playgroud)

result阵列不必进行排序.

速度是一个问题,因为这两个valuessearchvals可能很大,

for searchval in searchvals:
    np.where(values == searchval)[0]
Run Code Online (Sandbox Code Playgroud)

不削减它.

任何提示?

python arrays numpy

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

将std :: complex <double>转换为__complex128

我正在尝试在GCC中使用quadmath库.我有一个复杂的双值我想要转换成相应的四精度复数,__complex128.以下是最小(非)工作示例:

#include <quadmath.h>
#include <complex>
#include <stdio.h>
using namespace std::complex_literals;

int main(){
   std::complex<double> x = 1 + 2i;
   std::printf("x = %5.5g + %5.5g\n", x.real(), x.imag()); 
   __complex128 y = 2+2i;
   y = x;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此代码时

 g++ test.cpp -lquadmath -o test
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

test.cpp:10:6: error: cannot convert 'std::complex<double>' to '__complex128 {aka __complex__ __float128}' in assignment
y = x;
Run Code Online (Sandbox Code Playgroud)

如果我尝试用显式类型转换替换赋值行,

y = (__complex128) x;
Run Code Online (Sandbox Code Playgroud)

我得到了类似的错误

test.cpp:10:21: error: invalid cast from type 'std::complex<double>' to type '__complex128 {aka __complex__ __float128}'
y = …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point precision

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

将numpy.array中的每个元素与numpy.array中的每个元素相乘

给定两个numpy.array小号ab,

c = numpy.outer(a, b)
Run Code Online (Sandbox Code Playgroud)

返回一个二维数组c[i, j] == a[i] * b[j].现在,想象ak尺寸.

  • 哪个操作返回c维数k+1在哪里c[..., j] == a * b[j]

另外,让我们bl尺寸.

  • 哪个操作返回c维数k+1在哪里c[..., i1, i2, i3] == a * b[i1, i2, i3]

python arrays numpy

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

docker + apt-add-repository:'ascii'编解码器无法解码字节

在启动了一个新的Docker Ubuntu环境后,

docker run -ti ubuntu:17.04
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加PPA

apt-get update
apt-get install -y software-properties-common
apt-add-repository -y ppa:nschloe/vtk7-nightly
Run Code Online (Sandbox Code Playgroud)

然而,这失败了

gpg: key ECD154D280FEB8AC: public key "Launchpad PPA for Nico Schl?mer" imported
gpg: Total number processed: 1
gpg:               imported: 1
'ascii' codec can't decode byte 0xc3 in position 229: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

看起来像可怕的ö变形金刚再次袭来.

如何解决这个问题?

character-encoding docker

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

a+b+c 的 add3 指令,具有一次舍入

背景

众所周知,两个浮点数的精确乘积并不总是浮点数,但误差exact(a*b) - float(a*b)却是。一些精确乘法的代码通过返回两个数字来利用这一点

res = a * b
err = fma(a, b, -res)
Run Code Online (Sandbox Code Playgroud)

这利用了融合乘加指令,该指令(a*b)+c 通过一次舍入返回表达式。

问题

现在,我想对sums做同样的事情,即

res = a + b
err = add3(a, b, -res)
Run Code Online (Sandbox Code Playgroud)

add3应该返回(a+b)+c 具有一次舍入的表达式。

除了这篇文章之外,我找不到add3现实世界中实际存在的提示。

是否有包含以下内容的CPU指令集add3?有语言实现它吗?

floating-point instruction-set floating-accuracy instructions

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