小编Nic*_*mer的帖子

Python元组作为键慢?

我正在尝试在字典中实现快速查找已排序的元组; 回答"元组(3,8)是否具有相关价值的问题,如果是,它是什么?".让元组中的整数从下面绑定0,从上面绑定max_int.

我继续使用Python的dict,但发现它很慢.解决这个问题的另一种方法是创建一个包含max_int(通常为空)dicts的列表T,并为每个元组(3,8)设置T [3] [8] = value.我虽然这正是Python用dicts采用的bucket-hash方法,但后者在这里快了大约30倍(!).

而且,它很丑陋(特别是因为我现在要实现3元组),所以我非常感谢这里的一些提示.

作为参考,这是我用来获得时间的代码:

import numpy as np
import time

# create a bunch of sorted tuples
num_tuples = 10
max_int = 100
a = np.random.rand(num_tuples,2) * max_int
a = a.astype(int)
for k in xrange(len(a)):
    a[k] = np.sort(a[k])

# create dictionary with tuples as keys
d = {}
for t in a:
    d[tuple(t)] = 42

print d

# do some lookups
m = 100000
start_time = time.time()
for k in xrange(m):
    (3,8) in d.keys()
elapsed …
Run Code Online (Sandbox Code Playgroud)

python dictionary tuples key

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

计算4个点的任何四面体的体积

我需要计算4分的"任意"四面体的体积.我正在写一个程序,需要找到四面体的体积,而我所知道的是:4点的所有X,Y,Z位置.该功能必须返回音量.我被困在这里10个小时......我想不出任何事情.谢谢!

math 3d geometry

8
推荐指数
4
解决办法
2万
查看次数

隐式删除了复制构造函数,因为默认定义不正确

我有一个类A(来自我无法控制的库),有一个私有拷贝构造函数和一个clone方法,以及一个B派生自的类A.我想实现cloneB为好.

天真的做法

#include <memory>

class A { // I have no control here
  public:
    A(int a) {};

    std::shared_ptr<A>
      clone() const
      {
        return std::shared_ptr<A>(new A(*this));
      }

  private:
    A(const A & a) {};
};

class B: public A {
  public:
    B(int data, int extraData):
      A(data),
      extraData_(extraData)
    {
    }

    std::shared_ptr<B>
    clone() const
    {
      return std::shared_ptr<B>(new B(*this));
    }

  private:
    int extraData_;
};

int main() {
  A a(1);
}
Run Code Online (Sandbox Code Playgroud)

但是,失败了,因为复制构造函数A是私有的:

main.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ clone copy-constructor private-constructor

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

Python打包:未安装子目录

我有一个带有布局的Python项目

setup.py
foobar/
    __init__.py
    foo.py
    bar/
        __init__.py
Run Code Online (Sandbox Code Playgroud)

哪里foobar/__init__.py

from . import foo
from . import bar
Run Code Online (Sandbox Code Playgroud)

setup.py

from setuptools import setup

setup(
    name='foobar',
    version='0.0.1',
    packages=['foobar'],
    )
Run Code Online (Sandbox Code Playgroud)

在做import foobar从源目录,这一切都按预期工作.然而,通过安装包时pip install .,子文件夹bar/没有安装,导致导入错误

ImportError: cannot import name bar
Run Code Online (Sandbox Code Playgroud)

任何提示?

python packaging setuptools setup.py

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

使用 tox 安装可选依赖项

我使用tox来测试具有以下基本配置的 python 项目 ( tox.ini):

[tox]
envlist = py3
isolated_build = True

[testenv]
deps =
    pytest
    pytest-cov
commands =
    pytest --cov {envsitepackagesdir}/foobar --cov-report xml --cov-report term
Run Code Online (Sandbox Code Playgroud)

不幸的是,该包的可选依赖项(如 中指定的setup.cfg)没有安装;原始点中相应的行是

pip install .[all]
Run Code Online (Sandbox Code Playgroud)

如何让 tox 安装所有可选依赖项?

python tox

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

将python函数广播到numpy数组

假设我们有一个特别简单的功能

import scipy as sp
def func(x, y):
   return x + y
Run Code Online (Sandbox Code Playgroud)

这个功能显然适用于几种内置Python数据类型xy像串,列表,整数,浮点,数组,等等.因为我们是在阵列特别感兴趣,我们考虑两个数组:

x = sp.array([-2, -1, 0, 1, 2])
y = sp.array([-2, -1, 0, 1, 2])

xx = x[:, sp.newaxis]
yy = y[sp.newaxis, :]

>>> func(xx, yy)
Run Code Online (Sandbox Code Playgroud)

这回来了

array([[-4, -3, -2, -1,  0],
  [-3, -2, -1,  0,  1],
  [-2, -1,  0,  1,  2],
  [-1,  0,  1,  2,  3],
  [ 0,  1,  2,  3,  4]])
Run Code Online (Sandbox Code Playgroud)

正如我们所期望的那样.

现在,如果想要将数组作为以下函数的输入?

def func2(x, y):
  if x > y:
     return x …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

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

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
查看次数

使用矩阵.在OpenGL ES 2.0中旋转

编辑 - 添加了更多代码

尝试使用OpenGL ES 2.0正确旋转我的四边形时遇到很多问题.

它似乎总是围绕屏幕坐标的中心旋转.我试图让它围绕它自己的中心旋转(2d,所以只有z轴).

我一直在尝试使用Matrix.translate,如下所示.但是,在此处更改x或y pos只是将四边形绘制在屏幕上的不同位置,但是当它旋转时,它再次围绕屏幕的中心旋转.请有人解释如何让它围绕它自己的z轴旋转(就像一个轮子)?

谢谢,这里是相关的代码行 - 如果需要更多,请询问,我会发布.(请注意,我在SO和更广泛的互联网上看了很多类似的问题,但到目前为止我还没有找到答案).

谢谢.

//Set rotation
Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f);

//Testing translation
Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f);

// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0);
Run Code Online (Sandbox Code Playgroud)

我的着色器(在班级宣布)

private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +

"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";

private final String fragmentShaderCode =
"precision mediump float;" + …
Run Code Online (Sandbox Code Playgroud)

android rotation opengl-es-2.0 translate-animation

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

sizeof long double和precision不匹配?

考虑以下C代码:

#include <stdio.h>
int main(int argc, char* argv[]) 
{
    const long double ld = 0.12345678901234567890123456789012345L;
    printf("%lu %.36Lf\n", sizeof(ld), ld);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc 4.8.1under 编译Ubuntu x64 13.04,它打印:

16 0.123456789012345678901321800735590983
Run Code Online (Sandbox Code Playgroud)

这告诉我一个长的双重16字节,但小数似乎只对第20位.这怎么可能?16个字节对应四边形,四边形给出33到36个小数.

c floating-point precision long-double

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