小编ali*_*i_m的帖子

numpy.logical_and和&之间的区别

我正在尝试使用logical_and两个或更多numpy数组.我知道numpy有这个功能logical_and(),但我发现简单的运算符&返回相同的结果并且可能更容易使用.

例如,考虑三个numpy数组a,b和c.是 np.logical_and(a, np.logical_and(b,c)) 相当于 a & b & c

如果它们(或多或少)相同,使用的优点是logical_and()什么?

numpy logical-operators

17
推荐指数
2
解决办法
6506
查看次数

构建多元回归模型会抛出错误:"Pandas数据转换为numpy dtype对象.使用np.asarray(data).`检查输入数据

我有一些pandas数据帧,其中一些分类预测变量(即变量)为0和1,以及一些数字变量.当我适合像以下的stasmodel:

est = sm.OLS(y, X).fit()
Run Code Online (Sandbox Code Playgroud)

它抛出:

Pandas data cast to numpy dtype of object. Check input data with np.asarray(data). 
Run Code Online (Sandbox Code Playgroud)

我使用了转换DataFrame的所有dtypes df.convert_objects(convert_numeric=True)

在此之后,所有数据框变量的dtypes都显示为int32或int64.但最后它仍然显示dtype: object,像这样:

4516        int32
4523        int32
4525        int32
4531        int32
4533        int32
4542        int32
4562        int32
sex         int64
race        int64
dispstd     int64
age_days    int64
dtype: object
Run Code Online (Sandbox Code Playgroud)

这里4516,4523是变量标签.

任何的想法?我需要在数百个变量上构建一个多元回归模型.为此,我连接了3个pandas DataFrames,以提出用于模型构建的最终DataFrame.

python numpy pandas statsmodels

17
推荐指数
2
解决办法
3万
查看次数

以内存效率的方式生成包含随机布尔值的大型numpy数组

我需要创建一个包含随机布尔值的大型numpy数组,而不需要调用swap.

我的笔记本电脑有8 GB的RAM.创建一个(1200, 2e6)数组需要不到2秒,并使用2.29 GB的RAM:

>>> dd = np.ones((1200, int(2e6)), dtype=bool)
>>> dd.nbytes/1024./1024
2288.818359375

>>> dd.shape
(1200, 2000000)
Run Code Online (Sandbox Code Playgroud)

对于相对较小的(1200, 400e3),np.random.randint仍然相当快,大约需要5秒才能生成458 MB阵列:

db = np.array(np.random.randint(2, size=(int(400e3), 1200)), dtype=bool)
print db.nbytes/1024./1024., 'Mb'
Run Code Online (Sandbox Code Playgroud)

但是如果我将数组的大小增加一倍以(1200, 800e3)达到交换量,那么创建需要大约2.7分钟db;(

cmd = """
import numpy as np
db = np.array(np.random.randint(2, size=(int(800e3), 1200)), dtype=bool)
print db.nbytes/1024./1024., 'Mb'"""

print timeit.Timer(cmd).timeit(1)
Run Code Online (Sandbox Code Playgroud)

使用random.getrandbits时间更长(约8分钟),并且还使用交换:

from random import getrandbits
db = np.array([not getrandbits(1) for x in xrange(int(1200*800e3))], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

使用 np.random.randintfor (1200, …

python random performance boolean numpy

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

是否可以使用F2PY从共享库中包装函数?

我正在开发一个包,它需要来自LAPACK Fortran库的dgtsv子例程的 Python绑定.目前,我正在分发Fortran源文件,dgtsv.f以及我的Python代码,并使用numpy.distutils它自动包装并将其编译成_gtsv.so可从Python调用的共享库.

这是我的setup.py文件目前的样子:

from numpy.distutils.core import setup, Extension, build_ext
import os


fortran_sources = ["dgtsv.f"]
gtsv = Extension(
    name="pyfnnd._gtsv",
    sources=[os.path.join("pyfnnd", "LAPACK", ff) for ff in fortran_sources],
    extra_link_args=['-llapack']
)

setup(
    name='pyfnnd',
    py_modules=['_fnndeconv', 'demo', '_tridiag_solvers'],
    cmdclass={'build_ext': build_ext.build_ext},
    ext_modules=[gtsv],
)
Run Code Online (Sandbox Code Playgroud)

请注意,为了实际使用_gtsv.so,我仍然需要链接到预先存在的LAPACK共享库(extra_link_args=['-llapack']).由于这个库应该已经包含dgtsv子例程,在我看来,将函数包装在现有的共享库中更简洁,而不必分发实际的Fortran源.

但是,我从未遇到任何使用F2PY来包装作为共享库的一部分的函数而不仅仅是原始Fortran源代码的示例.这可能吗?

python distutils numpy lapack f2py

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

n维快速傅立叶变换的计算复杂度?

我正在尝试编写一些代码来预测在给定的n维数组上执行离散傅立叶变换所需的时间,但我很难理解n维FFT的计算复杂性.

据我了解:

  • 长度的矢量的一维FFT N应该采取k*(N*log(N))其中k是一些定时恒定

  • 对于M*N矩阵,2D FFT应采用:

    N*(k*M*log(M)) + M*(k*N*log(N)) = k*M*N*(log(M)+log(N))

    因为它需要在每行和每列中采用1D FFT

这如何概括为ND案例?它应该遵循它应该是k*prod(dimensions)*sum(log(dimensions))吗?

math big-o fft

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

在并行程序中播种随机数生成器

我正在研究Python的多处理模块.我有两个案例:

防爆.1

def Foo(nbr_iter):
    for step in xrange(int(nbr_iter)) :
        print random.uniform(0,1)
...

from multiprocessing import Pool

if __name__ == "__main__":
    ...
    pool = Pool(processes=nmr_parallel_block)
    pool.map(Foo, nbr_trial_per_process)
Run Code Online (Sandbox Code Playgroud)

例2.(使用numpy)

 def Foo_np(nbr_iter):
     np.random.seed()
     print np.random.uniform(0,1,nbr_iter)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,随机数生成器都在其分叉进程中播种.

为什么我必须在numpy示例中明确地进行种子设定,而不是在Python示例中?

python random numpy multiprocessing

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

Python GC是否处理这样的参考周期?

使用objgraph,我发现了一堆像这样的对象:

InstanceState循环

Python的垃圾收集器会处理这样的循环,还是会泄漏?

稍微宽一点的循环视图:

更广泛的InstanceState循环视图

python garbage-collection memory-leaks objgraph

14
推荐指数
3
解决办法
6020
查看次数

Python中内存高效的大块numpy数组

我需要使用numpy对非常大的基因组数据集进行排序.我有一个26亿浮点数的数组,维度= (868940742, 3)一旦加载并且只是坐在那里,我的机器上占用了大约20GB的内存.我有一台2015年初的13英寸MacBook Pro,配备16GB内存,500GB固态高清和3.1 GHz intel i7处理器.只是加载数组溢出到虚拟内存,但没有到我的机器遭受的程度,或者我必须停止我正在做的其他事情.

我从22个较小的(N, 2)子阵列逐步构建了这个非常大的数组.

函数使用我调用的22个子数组中的每一个FUN_1生成2个新(N, 1)数组sub_arr.

第一个输出FUN_1是通过插入来自sub_arr[:,0]数组的值生成的b = array([X, F(X)]),第二个输出是通过sub_arr[:, 0]使用数组放入二进制数来生成的r = array([X, BIN(X)]).我分别称这些输出b_arrrate_arr.该函数返回一个3元组的(N, 1)数组:

import numpy as np

def FUN_1(sub_arr):
    """interpolate b values and rates based on position in sub_arr"""

    b = np.load(bfile)
    r = np.load(rfile)

    b_arr = np.interp(sub_arr[:,0], b[:,0], b[:,1])
    rate_arr = np.searchsorted(r[:,0], sub_arr[:,0])  # HUGE efficiency gain …
Run Code Online (Sandbox Code Playgroud)

python memory sorting performance numpy

14
推荐指数
2
解决办法
5841
查看次数

在Numpy中创建特殊的对角矩阵

我正在尝试制作一个看起来像这样的numpy数组:

[a b c       ]
[  a b c     ]
[    a b c   ]
[      a b c ] 
Run Code Online (Sandbox Code Playgroud)

所以这涉及更新主对角线和它上面的两个对角线.

这样做的有效方法是什么?

python arrays numpy matrix toeplitz

13
推荐指数
2
解决办法
6916
查看次数

使用h5py编写大型hdf5数据集

目前,我正在使用h5py生成hdf5数据集.我有类似的东西

import h5py
import numpy as np
my_data=np.genfromtxt("/tmp/data.csv",delimiter=",",dtype=None,names=True)

myFile="/tmp/f.hdf"    
with h5py.File(myFile,"a") as f:
  dset = f.create_dataset('%s/%s'%(vendor,dataSet),data=my_data,compression="gzip",compression_opts=9)
Run Code Online (Sandbox Code Playgroud)

这适用于相对较大的ASCII文件(400MB).我想对更大的数据集(40GB)做同样的事情.使用h5py有更好或更有效的方法吗?我想避免将整个数据集加载到内存中.

有关数据的一些信息:

  1. 我不知道数据的类型.理想情况下,我想用dtype=Nonenp.loadtxt()
  2. 我不知道文件的大小(尺寸).他们各不相同

python numpy hdf5 h5py

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