小编Arc*_*s B的帖子

如何确定一个数字是否是任何类型的int(核心或numpy,是否签名)?

我需要测试变量是否为类型的int,或任何的np.int*,np.uint*优选使用单一的条件(没有or).

经过一些测试,我想:

  • isinstance(n, int)只会匹配intnp.int32(或np.int64取决于平台),
  • np.issubdtype(type(n), int)似乎所有的匹配intnp.int*,但不匹配np.uint*.

这导致两个问题:是否会np.issubdtype匹配任何类型的签名?可以在单个检查中确定一个数字是否是任何种类的有符号或无符号的int?

这是关于测试整数,测试应返回False浮动喜欢.

python types numpy

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

调用time.sleep或subprocess.Popen后,为什么Python操作会慢30倍?

考虑以下循环:

for i in range(20):
    if i == 10:
        subprocess.Popen(["echo"]) # command 1
    t_start = time.time()
    1+1 # command 2
    t_stop = time.time()
    print(t_stop - t_start)
Run Code Online (Sandbox Code Playgroud)

当"命令1"在其之前运行时,"命令2"命令系统地运行更长时间.下图显示了1+1作为循环索引函数的执行时间i,平均超过100次运行.

执行1+1时比之前慢30倍subprocess.Popen.

作为循环索引的函数的<code>subprocess.Popen()</code>受到影响,但事实并非如此.以下循环显示<strong>当前循环迭代中的所有命令都受到影响</strong>.但随后的循环迭代似乎基本上没问题.</p>

<pre><code>var = 0
for i in range(20):
    if i == 10:
      # command 1
      subprocess.Popen(['echo'])
    # command 2a
    t_start = time.time()
    1 + 1
    t_stop = time.time()
    print(t_stop - t_start)
    # command 2b
    t_start = time.time()
    print(1)
    t_stop = time.time() …</code></pre><a target=Run Code Online (Sandbox Code Playgroud)

python performance subprocess python-performance

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

使用multiprocessing.pool.map传递kwargs

我想通过Pool.map()将关键字参数传递给我的worker-function.在搜索论坛时,我找不到一个明确的例子.

示例代码:

import multiprocessing as mp

def worker((x,y), **kwargs):
    kwarg_test = kwargs.get('kwarg_test', False)
    print("kwarg_test = {}".format(kwarg_test))     
    if kwarg_test:
        print("Success")
    return x*y

def wrapper_process(**kwargs):
    jobs = []
    pool=mp.Pool(4)
    for i, n in enumerate(range(4)):
        jobs.append((n,i))
    pool.map(worker, jobs) #works
    pool.map(worker, jobs, kwargs) #how to do this?   

def main(**kwargs):
    worker((1,2),kwarg_test=True) #accepts kwargs
    wrapper_process(kwarg_test=True)

if __name__ == "__main__":    
    main()
Run Code Online (Sandbox Code Playgroud)

输出:

kwarg_test = True
Success
kwarg_test = False
kwarg_test = False
kwarg_test = False
kwarg_test = False
TypeError: unsupported operand type(s) for //: 'int' and 'dict' …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing kwargs

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

使用带有来自`util-linux`的`rename`版本的正则表达式

我正在使用该实用程序rename来自的 GNU/Linux 发行版,util-linux我想充分利用它的正则(Perl 或 POSIX)表达式。

两个版本rename

  • “Perl”版本,带语法 rename 's/^fgh/jkl/' fgh*
  • util-linux版本中,与语法rename fgh jkl fgh*

如果第一个正则表达式的使用似乎很明显,我无法轻松访问它。但是,我对第二个感到困惑:我找不到有关可能使用的任何相关文档或示例,在这种情况下,找不到要使用的正则表达式的格式。

让我们举一个简单的例子,一个包含以下内容的目录:

foo_a1.ext
foo_a32.ext
foo_c18.ext
foo_h12.ext
Run Code Online (Sandbox Code Playgroud)

我想使用类似这两行之一的语法:

rename "foo_[a-z]([0-9]{1,2}).ext" "foo_\1.ext" *
rename "foo_[:alpha:]([:digit:]{1,2}).ext" "foo_\1.ext" *
Run Code Online (Sandbox Code Playgroud)

预期输出为:

foo_1.ext
foo_32.ext
foo_18.ext
foo_12.ext
Run Code Online (Sandbox Code Playgroud)

这当然行不通!要么我遗漏了一些明显的东西,要么没有实现的方法可以在这个工具中使用实际的正则表达式。

(请注意,我知道在 shell 解释器中使用正则表达式重命名文件的其他可能性;这个问题针对该rename工具的特定版本。)

regex linux bash

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

使用astropy.io读取一堆FITS时出现OSError 24(打开的文件太多)

我正在尝试使用astropy.io.fits以下方式将一些2000 FITS加载到内存中:

def readfits(filename):
    with fits.open(filename) as ft:
        # the fits contain a single HDU
        data = ft[0].data
    return data

data_sci = []
for i in range(2000):
    data_sci.append(readfits("filename_{}.fits".format(i)))
Run Code Online (Sandbox Code Playgroud)

但是,到达1015th文件时,OSError: [Errno 24] Too many open files将引发。

我有同样的问题:

def readfits(filename):
    ft = fits.open(filename) as ft:
    data = ft[0].data
    ft.close()
    return data
Run Code Online (Sandbox Code Playgroud)

我怀疑astropy.io.fits无法正确关闭文件。有什么办法可以强制关闭文件?

python fits astropy

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

不使用 pip 列出 virtualenv 中安装的软件包(以及相应版本)

背景:从 Debian 8 更新到 9 后,Python 3.4 virtualenvs 停止工作,因为系统站点包全部被 Python 3.5 版本替换。这个答案建议删除旧的 virtualenv,创建一个新的,并使用pip install -r requirements.txt. 但是,我没有适用requirements.txt于所有的 virtualenv。我知道可以使用 创建此类文件pip freeze,但由于上述原因,pip无法使用1

\n\n

问题:我需要生成软件包列表以及它们各自安装在我\xc2\xa0 无法激活的virtualenv 中的列表。

\n\n

问题:有没有办法获得类似于输出的列表pip freeze有没有办法在不实际运行 pip 的情况下获得类似于 virtualenv 的

\n\n

注意:这个问题与 \xe2\x80\x9c返回脚本中使用的导入的 Python 模块列表不同?\xe2\x80\x9d 并且因为请求的答案不需要访问使用 virtualenv 的脚本,并且还应该返回 virtualenv 2中安装的软件包的版本。

\n\n
\n\n

1也就是说,运行pip(使用任何参数)会引发ImportError: No module named \'encodings\'.

\n\n

2完全披露:我问了一个类似的问题,但被错误地视为重复而关闭。

\n

python pip virtualenv

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

在scipy.interpolate.griddata和method = nearest的边界之外使用fill_value

函数scipy.interpolate.griddata允许指定fill_valuedoc指出的关键字:

用于填写输入点凸包之外的请求点的值。如果未提供,则默认值为nan。 此选项对“最近”方法无效。

但是,fill_valuemethod='nearest'与2D数据一起使用时,我需要指定a 在边界之外使用。如何做到这一点?

python interpolation numpy scipy qhull

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