小编les*_*enk的帖子

提高numpy映射操作的性能

我有一个大小不等的数组(4,X,Y),其中第一个维度代表(R,G,B,A)四联体.我的目标是将每个X*YRGBA四元组转换为X*Y浮点值,给定一个匹配它们的字典.

我目前的代码如下:

codeTable = {
    (255, 255, 255, 127): 5.5,
    (128, 128, 128, 255): 6.5,
    (0  , 0  , 0  , 0  ): 7.5,
}

for i in range(0, rows):
    for j in range(0, cols):
        new_data[i,j] = codeTable.get(tuple(data[:,i,j]), -9999)
Run Code Online (Sandbox Code Playgroud)

哪个data是大小的numpy数组(4, rows, cols),并且new_data大小(rows, cols).

代码工作正常,但需要很长时间.我该如何优化这段代码?

这是一个完整的例子:

import numpy

codeTable = {
    (253, 254, 255, 127): 5.5,
    (128, 129, 130, 255): 6.5,
    (0  , 0  , 0  , 0  ): …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

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

Arch Linux中没有OpenGL 3头文件

我正在尝试使用FreeGLUT编译一个非常简单的"Hello world"OpenGL 3.3程序.在我发现的所有教程中,它们都包含一个标题"gl3.h".问题是,我没有这样的头文件.

$ ls -l /usr/include/GL/
total 2164
-rw-r--r-- 1 root root   8797 20 janv. 17:44 freeglut_ext.h
-rw-r--r-- 1 root root    681 20 janv. 17:44 freeglut.h
-rw-r--r-- 1 root root  26181 20 janv. 17:44 freeglut_std.h
-rw-r--r-- 1 root root 837247 27 janv. 12:55 glew.h
-rw-r--r-- 1 root root 656589 21 mars  18:07 glext.h
-rw-r--r-- 1 root root  84468 21 mars  18:07 gl.h
-rw-r--r-- 1 root root 128943 21 mars  18:07 gl_mangle.h
-rw-r--r-- 1 root root  17255 21 mars  18:07 …
Run Code Online (Sandbox Code Playgroud)

c++ archlinux opengl-3

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

缓冲区溢出漏洞利用:函数 ret 上的段错误到堆栈代码

我试图利用测试程序中的缓冲区溢出来执行任意代码。我在 NetBSD 6 i386 上。这是C代码:

int checkPassword(char *password)
{
  char                  savePassword[64] = {0};
  char                  *logMessage;
  int                   isUser = 0;
  int                   isAdmin = 0;
  int                   i;

  if (!strcmp(password, userPassword))
    isUser = 1;
  strcpy(savePassword, password);  
  for (i = 0; password[i]; ++i)
    password[i] ^= xorKey;
  if (!strcmp(password, adminPassword))
    isAdmin = 1;
  if (!(isAdmin | isUser)) {
    /* ... */
  }
  return isAdmin ? ADMIN : isUser ? USER : NOBODY; /* main.c:79 */
}
Run Code Online (Sandbox Code Playgroud)

我将代码插入savePassword缓冲区 (at %ebp - 0x58)。下面是 GDB …

c exploit buffer-overflow segmentation-fault netbsd

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

在大型OneToMany – ManyToOne关联上有效地进行迭代

我有两个实体UserPeriod,它们具有ManyToMany关联:一个用户属于多个期间,一个期间具有多个用户。该关联使用UserPeriod实体。

class Period
{
    /**
     * @ORM\OneToMany(targetEntity="UserPeriod", mappedBy="period")
     */
    private $users;
}

class UserPeriod
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="User", inversedBy="periods")
     */
    private $user;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Period", inversedBy="users")
     */
    private $period;
}

class User extends BaseUser
{
    /**
     * @ORM\OneToMany(targetEntity="UserPeriod", mappedBy="user")
     */
    protected $periods;
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是获取定义期间内所有用户的列表。由于用户很多,因此无法将它们全部加载到内存中,而必须在它们上进行迭代(批处理)。这是我尝试过的:

public function getUsersOfQuery($period)
{
    return $this->_em->createQueryBuilder()
                ->select('u')
                ->from('SGLotteryUserBundle:LotteryUser', 'u')
                ->innerJoin('u.periods', 'p')
                ->where('p.period = :id')
                ->setParameter('id', $period->id())
                ->getQuery();
}

$it = $repo->getUsersOfQuery($period)->iterate();
Run Code Online (Sandbox Code Playgroud)

但是,引发了此异常:

[Doctrine\ORM\Query\QueryException]                                                                           
Iterate with fetch …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm

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

FastCGI:检索请求标头

我目前正在使用带有Apache和mod_fcgid的FastCGI开发Web C++应用程序.

我正在尝试检索请求的标头,但我没有找到如何执行此操作.经过一些研究,我认为标题位于"FCGX_Request"的属性"envp"中,但它包含环境变量,例如:

REMOTE_ADDR: 192.168.0.50
SERVER_SOFTWARE: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/1.0.0f DAV/2 mod_fcgid/2.3.6
REDIRECT_UNIQUE_ID: TxytP38AAAEAABpcDskAAAAE
FCGI_ROLE: RESPONDER
HTTP_ACCEPT_LANGUAGE: fr
SERVER_SIGNATURE: <address>Apache/2.2.21 [etc.]
Run Code Online (Sandbox Code Playgroud)

这些变量为我提供了有用的信息,但我需要真正的HTTP头,特别是"Cookie".我试图读取"FCGX_Request"的"in"流,但似乎是请求体(POST数据).由于我的应用程序是多线程的,我使用"FCGX_Accept_r()",如下所示:

while(true)
{
    FCGX_Init();
    FCGX_Request* fcgiRequest = new FCGX_Request;
    FCGX_InitRequest(fcgiRequest, 0, 0);

    if(FCGX_Accept_r(fcgiRequest) < 0)
        break;

    Request* request = new Request(fcgiRequest);
    request->process();
}
Run Code Online (Sandbox Code Playgroud)

但实际上,我不使用线程.请求一个接一个地执行.

如何获取请求标头?

谢谢.

c c++ fastcgi

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

使用MinGW-W64的LTO的DLL链接失败

我未能使用MinGW-W64为Windows x86-64构建共享库-flto。这是我得到的(在Linux机器上完成编译):

# ...
x86_64-w64-mingw32-g++ -c -std=gnu++11 -fvisibility=hidden -DGLEW_STATIC -Ofast -flto -frtti -pedantic -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_LARGEFILE_SUPPORT -I. -I'include' -I'/usr/x86_64-w64-mingw32/share/qt4/mkspecs/win32-g++-cross-x64' -o build/Point3D.o src/Point3D.cpp
x86_64-w64-mingw32-g++ -mwindows -Ofast -flto -shared -Wl,-subsystem,windows -mthreads -Wl,--out-implib,lib/libglengine.a -o lib/glengine.dll object_script.glengine.Release  -lopengl32 -Wl,-Bstatic -lturbojpeg -lpng -lwebpdecoder 
Cannot export _ZNSt6vectorI6StringSaIS0_EE19_M_emplace_back_auxIJRKS0_EEEvDpOT_: symbol wrong type (4 vs 3)
Cannot export _ZNSt6vectorIPN3GLE6ShaderESaIS2_EE19_M_emplace_back_auxIJRKS2_EEEvDpOT_: symbol wrong type (4 vs 3)
Cannot export _ZNSt6vectorIPN3GLE7ProgramESaIS2_EE19_M_emplace_back_auxIJRKS2_EEEvDpOT_: symbol wrong type (4 vs 3)
collect2: error: ld returned 1 exit status
Makefile.Release:211: recipe for …
Run Code Online (Sandbox Code Playgroud)

c++ mingw mingw-w64 lto

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