小编Dsc*_*oni的帖子

删除模块以清除命名空间?

我正在研究一个非常庞大的Python包.在几个模块中,不同的程序员导入其他模块进行计算.为了这个讨论,让我们坚持下去numpy.

通常的做法是,在导入模块时定义一个别名以便于编程,所以让我们说在一个模块中foo.py有一行做

import numpy as np
Run Code Online (Sandbox Code Playgroud)

所以会有一个foo.np命名空间.我也发现,通过删除对np内部的引用foo.py来做

del np
Run Code Online (Sandbox Code Playgroud)

在模块的末尾似乎也清除了命名空间.

作为一个庞大的包的维护者,我喜欢这种保持命名空间干净的方式,但我想知道这是不是很好的编程实践,或者是否有问题,特别是如果我的包有一个模块bar.py在同一级别foo.py也使用相同的外部numpy模块?如果是的话,是否有一种简单而更好的方法来保持命名空间foobar清理,或者命名空间本身是一个坏主意?

python namespaces module package

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

计算在另一个数组中没有重叠的数组的出现次数

我有一个mxn矩阵A,在那里m%t = n%t = 0,一个较小的txt矩阵B平铺矩阵,没有边框或重叠.我想检查是否A完全由瓷砖组成,B而不是尽可能有效地计算瓷砖作为中间步骤.此外,对于我的特殊用例,没有必要知道B.它足以测试是否A严格重复txt每个方向的每个瓦片.

数字示例:

A = [[1, 0, 1, 0],
     [0, 1, 0, 1],
     [1, 0, 1, 0],
     [0, 1, 0, 1]]
B.shape = [2,2]
--> True
B.shape = [1,1]
--> False
Run Code Online (Sandbox Code Playgroud)

到目前为止,我计算了一个比较矩阵C,它只是一个B适合以下大小的平铺A:

import numpy as np
x,y      = B.shape
x_a, y_a = A.shape
x_t = x_a/x
y_t = y_a/y
B_dash = …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

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

加入多处理队列需要很长时间

在 Python 2.7 中,我实现了一个具有多个队列和消费者的多处理场景。简化的想法是,我有一个作业的生产者,这些作业被提供给消费者,处理作业和一个错误处理程序,它负责所有的日志记录。非常简化,看起来都可以与之媲美:

import multiprocessing as mp
import Queue

job_queue = mp.Queue()
error_queue = mp.Queue()
for i in range(10):
    job_queue.put(i)

def job_handler(job_queue, error_queue):
    print 'Job handler'
    while True:
        try: 
            element = job_queue.get_nowait()
            print element
        except:
# t1
            error_queue.put('Error')
            error_queue.close()
            error_queue.join_thread()
            job_queue.close()
            job_queue.join_thread()
# t2
            return 1

def error_handler(error_queue):
    result = error_queue.get()
    if result == 'Error':
        error_queue.close()
        error_queue.join_thread()

if __name__ == '__main__':
    print 'Starting'
    p1 = mp.Process(target = error_handler, args = (error_queue, ))
    p1.start()
    p2 = mp.Process(target = job_handler, args …
Run Code Online (Sandbox Code Playgroud)

python queue python-multiprocessing

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

在3D numpy网格中绘制/采样球体

我想做一个基于体素的球形物体测量,以numpy数组表示.由于采样,这些球体被表示为一组立方体(因为它们在阵列中被采样).我想通过此网格限制模拟引入的错误.有没有办法在numpy网格中绘制3D球体来运行我的模拟?(所以基本上,单位长度为1的球体,将是阵列中的一个点)

或者是否有其他方法来计算采样引入的误差?

二维似乎很容易......二维采样

geometry drawing numpy sampling

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

自动从 S3 删除旧备份并每月移动到冰川

我已设置 Gitlab 将每日备份保存到 Amazon S3 存储桶。我想在冰川上保留一年前的每月备份,在标准存储上保留一周前的每日备份。使用 S3 生命周期规则,此清理策略是否可行?如果是,怎么办?

backup amazon-s3 backup-strategies amazon-web-services

3
推荐指数
1
解决办法
1510
查看次数

Numpy/Python:没有for循环的数组迭代

所以这是另一个n维数组问题:我希望能够将n维数组中的每个值与其邻居进行比较.例如,如果a是我希望能够检查的二维数组:

a[y][x]==a[y+1][x]
Run Code Online (Sandbox Code Playgroud)

对于所有元素.所以基本上检查所有维度的所有邻居.现在我通过以下方式做到:

for x in range(1,a.shape[0]-1):
   do.something(a[x])
Run Code Online (Sandbox Code Playgroud)

使用数组的形状,这样我就不会在边缘处遇到超出范围的索引.因此,如果我想在nD中对数组中的所有元素执行类似的操作,我确实需要n个for循环,这似乎是不整齐的.有没有办法通过切片这样做?有点像== a [:, - 1,:]还是我理解这完全错了?有没有办法告诉切片最后停止?还是会有另一种想法让事情以另一种方式发挥作用?蒙面阵列?迎接Joni

python arrays indexing numpy slice

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

numpy数组中的快速值交换

所以,这应该是相当容易的,但它似乎需要花费大量的时间给我:我有一个只有两个值的numpy数组(例如0和255)我想以这种方式反转矩阵,所有值交换(0变为255,反之亦然).矩阵大约有2000个条目,所以这是认真的工作!我首先尝试了numpy.invert方法,这不是我所期望的.所以我试着通过"存储"值然后覆盖它们来自己做:

for i in range(array.length):
            array[i][array[i]==255]=1
            array[i][array[i]==0]=255
            array[i][array[i]==1]=0
Run Code Online (Sandbox Code Playgroud)

这是表现出预期的,但需要很长时间(我猜是因为for循环?).如果我将其实现为多线程计算,其中每个线程"反转"一个较小的子数组,那会更快吗?还是有另一种方法可以更方便地做到这一点?

python arrays numpy

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

在树莓派上使用 python 3 安装 Spyder

由于 python 2 很快就要结束了,我正在寻找一种方法来在我的 raspberry pi(使用 Raspbian buster)上获得带有 python 3 的可用 IDE。我设法安装了与 python 3 捆绑在一起的 Miniconda,但由于无法解决的包冲突,似乎无法在任何环境中安装 spyder。我可以使用 安装 spyder apt-get,它指向带有 python 2.7 的旧版本。我最后的手段是安装spyder-kernels在我的 conda 环境中,但由于与jupyter-client. 有没有人设法在树莓上使用 python 3 获得 spyder?

python spyder raspberry-pi

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

Windows下直接在cmd上运行python命令

我正在寻找一种方法,直接从 Windows cmd 调用简单的 python 单行程序,而无需在某处存储 .py 文件。

就像是

python print('Test').

这可能吗?

python windows cmd command-line-interface

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

使用math.erf()为dtype('int64')分配意外值时未更新Numpy数组

我只是math.erf()想把输出写成一个numpy数组.我所做的只是:

import numpy as np
import math
a=np.array([0,0,0])
a[0]=math.erf(5)
Run Code Online (Sandbox Code Playgroud)

但是,a永远不会更新以保持输出的值math.erf()应该只是一个浮点数.我究竟做错了什么?

更新

a通过从列表中创建a=np.asarray(a),它似乎工作.

arrays math int numpy

0
推荐指数
1
解决办法
226
查看次数