小编jos*_*ers的帖子

使用Python/NumPy对数组中的项目进行排名

我有一个数字数组,我想创建另一个数组,表示第一个数组中每个项目的排名.我正在使用Python和NumPy.

例如:

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

这是我提出的最佳方法:

array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.arange(len(array))[temp.argsort()]
Run Code Online (Sandbox Code Playgroud)

有没有更好/更快的方法避免两次排序数组?

python sorting numpy

82
推荐指数
6
解决办法
7万
查看次数

使用zlib支持从源代码构建Python

在Ubuntu 12.04上从源代码构建Python 3.2.3时,zlib模块不可用.

我从python.org下载了官方的源代码发行版,并尝试使用以下命令构建和安装它.

tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

make命令输出包括以下内容.

Python build finished, but the necessary bits to build these modules were not found:
_curses            _curses_panel      _dbm            
_gdbm              _sqlite3           _ssl            
_tkinter           bz2                readline        
zlib                                            
Run Code Online (Sandbox Code Playgroud)

运行make install并启动解释器后,zlib无法导入模块.

我确认该zlib1g-dev软件包已安装在我的系统上.

我也发现了类似的问题,建议--with-zlib./configure命令中添加标志.但是,这会返回一个错误,它是一个无法识别的选项,并且没有任何效果.

python python-3.x

44
推荐指数
5
解决办法
6万
查看次数

向pip提供NumPy site.cfg参数

我正在使用针对英特尔数学核心库构建的NumPy.我使用virtualenv,通常使用pip来安装包.

但是,为了让NumPy找到MKL库,必须在编译之前在NumPy源目录中创建一个site.cfg文件,然后手动构建和安装.我可以编写整个过程的脚本,但我希望有一个更简单的解决方案.

我有一个标准的site.cfg文件,可以在版本控制下用于此目的.是否有任何pip命令行选项会告诉它在构建包之前将特定文件复制到源目录?

或者,是否可以设置任何环境变量而不是在site.cfg文件中提供库路径?这是我使用的site.cfg文件.它几乎逐字逐句地从英特尔网站上获取.

[mkl]
library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64
include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include
mkl_libs = mkl_rt
lapack_libs =
Run Code Online (Sandbox Code Playgroud)

作为参考,我正在运行Ubuntu,Python 2.7和NumPy 1.6.

python numpy pip intel-mkl

31
推荐指数
3
解决办法
9216
查看次数

在Cython中访问NumPy记录数组列

我是一个相对经验丰富的Python程序员,但是在很长一段时间内没有编写任何C语言并试图理解Cython.我正在尝试编写一个Cython函数,它将在NumPy重组的列上运行.

我到目前为止的代码如下.

recarray_func.pyx:

import numpy as np
cimport numpy as np

cdef packed struct rec_cell0:
  np.float32_t f0
  np.int64_t i0, i1, i2

def sum(np.ndarray[rec_cell0, ndim=1] recarray):
    cdef Py_ssize_t i
    cdef rec_cell0 *cell
    cdef np.float32_t running_sum = 0

    for i in range(recarray.shape[0]):
        cell = &recarray[i]
        running_sum += cell.f0
    return running_sum
Run Code Online (Sandbox Code Playgroud)

在翻译提示:

array = np.recarray((100, ), names=['f0', 'i0', 'i1', 'i2'],
                             formats=['f4', 'i8', 'i8', 'i8'])
recarray_func.sum(array)
Run Code Online (Sandbox Code Playgroud)

这简单地总结f0了重新排列的列.它编译并运行没有问题.

我的问题是,我如何修改它以便它可以在任何列上运行?在上面的示例中,sum的列是硬编码的,并通过点表示法访问.是否可以更改函数,以便将作为参数的列传入?

python numpy cython

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

标签 统计

python ×4

numpy ×3

cython ×1

intel-mkl ×1

pip ×1

python-3.x ×1

sorting ×1