我正在研究一个非常庞大的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
模块?如果是的话,是否有一种简单而更好的方法来保持命名空间foo
和bar
清理,或者命名空间本身是一个坏主意?
我有一个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 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) 我想做一个基于体素的球形物体测量,以numpy数组表示.由于采样,这些球体被表示为一组立方体(因为它们在阵列中被采样).我想通过此网格限制模拟引入的错误.有没有办法在numpy网格中绘制3D球体来运行我的模拟?(所以基本上,单位长度为1的球体,将是阵列中的一个点)
或者是否有其他方法来计算采样引入的误差?
二维似乎很容易......
我已设置 Gitlab 将每日备份保存到 Amazon S3 存储桶。我想在冰川上保留一年前的每月备份,在标准存储上保留一周前的每日备份。使用 S3 生命周期规则,此清理策略是否可行?如果是,怎么办?
所以这是另一个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
所以,这应该是相当容易的,但它似乎需要花费大量的时间给我:我有一个只有两个值的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 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?
我正在寻找一种方法,直接从 Windows cmd 调用简单的 python 单行程序,而无需在某处存储 .py 文件。
就像是
python print('Test')
.
这可能吗?
我只是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)
,它似乎工作.