小编MSe*_*ert的帖子

爆炸词典 - 获取词典中所有值的组合

我希望将字典中值的所有组合作为多个字典(每个字典包含原始的每个键但只包含原始值的一个值).假设我想通过以下方式参数化函数调用:

kwargs = {'a': [1, 2, 3], 'b': [1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)

如何获得所有组合的列表,如下所示:

combinations = [{'a': 1, 'b': 1}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3},
                {'a': 2, 'b': 1}, {'a': 2, 'b': 2}, {'a': 2, 'b': 3},
                {'a': 3, 'b': 1}, {'a': 3, 'b': 2}, {'a': 3, 'b': 3}]
Run Code Online (Sandbox Code Playgroud)

原始中可以有任意数量的密钥,kwargs并且每个值都是可迭代的,但值的数量不固定.

如果可能:final combinations应该是一个生成器(不是列表).

python dictionary cartesian-product

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

numba nopython模式"Undefined variable'$ 313.3'"

这是我从图像构造最小树的代码(f是由scipy提供的图像)

这是我写的缝纫雕刻计划的基础.

此代码段在普通python中按预期工作.当我@numba.jit没有使用时nopython=True,它也可以工作(性能提高约200%!),但这是在对象模式下.

当我尝试使用nopython=True模式时,它不会编译,我收到错误:

Failed at nopython (nopython frontend)
Undefined variable '$313.3'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不会编译,因为我没有看到任何可能未定义的东西.

from numba import jit
from scipy import misc
import numba

f = misc.face()
@jit(nopython=True)
def explorethisx(inar, x):
    places = []
    places.append((x,0))
    x1,y1 = x,0
    s = numba.int64(0)
    co = 0
    #for _ in range( 799):

    while co != numba.int16(799):
        co += 1
        a1,a2,a3 = 999,999,999
        a1 = inar[y1 + 1][x1-1][1]
        a2 = inar[y1 + 1][x1][1]
        a3 = inar[y1 + …
Run Code Online (Sandbox Code Playgroud)

python numpy numba

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

嵌套for循环:为什么内循环只执行一次?

我对在python中使用double for循环感到困惑,这是我的代码:

import numpy as np

range1 = np.linspace(1,6,10)
range2 = reversed(np.linspace(1,6,10))

for t1 in range1:
    print t1
    for t2 in range2:
        print t1,t2
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

1.0
1.0 6.0
1.0 5.44444444444
1.0 4.88888888889
1.0 4.33333333333
1.0 3.77777777778
1.0 3.22222222222
1.0 2.66666666667
1.0 2.11111111111
1.0 1.55555555556
1.0 1.0
1.55555555556
2.11111111111
2.66666666667
3.22222222222
3.77777777778
4.33333333333
4.88888888889
5.44444444444
6.0
Run Code Online (Sandbox Code Playgroud)

它只对外循环的第一个值执行内循环,为什么会发生这种情况?如何让它循环遍历第一个和第二个变量的所有组合?

python reverse loops for-loop nested

4
推荐指数
3
解决办法
698
查看次数

如何在python中将黑白图像转换为3维数组?

我有RGB格式或灰度格式的图像(例如,我通过Gimp对其进行了转换),现在每次我以灰度级加载图像,或者只是将其转换为灰度格式时,形状始终显示[height,width],而没有第三个尺寸(颜色通道数)。

我知道通常黑白图像都是以这种格式存储的,但是我特别需要[height, width, 1]图像形状,即可以得到的图像形状,例如:

numpy.zeros(shape=[400, 400, 1])
Run Code Online (Sandbox Code Playgroud)

python numpy image image-processing computer-vision

4
推荐指数
2
解决办法
3289
查看次数

根据固定长度填充或截断字符串

目前有类似的代码;

print '{: <5}'.format('test')
Run Code Online (Sandbox Code Playgroud)

' '如果小于5个字符,这将填充我的字符串.如果字符串超过5个字符,我需要截断字符串.

在格式化之前没有明确检查我的字符串的长度,是否有更好的方法来填充小于固定长度或截断如果大于固定长度?

python string string-formatting

4
推荐指数
2
解决办法
1457
查看次数

删除数组中与布尔掩码对应的所有元素

我有一个作为二维 numpy 数组(布尔数组)存在的布尔掩码

array([[ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [False, False, False, False, False, False, False],
       [False, False, False, False, False, False, False],
       [False, False, False, False, False, False, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

我还有一个单独的二维 numpy 值数组,其尺寸与布尔掩码(值数组)相同

array([[ 19.189 ,  23.2535,  23.1555,  23.4655,  22.6795,  20.3295,  19.7005],
       [ 20.688 ,  20.537 ,  23.8465,  21.2265,  24.5805,  25.842 ,  23.198 …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy slice multidimensional-array

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

生成器和文件

我写的时候:

lines = (line.strip() for line in open('a_file'))
Run Code Online (Sandbox Code Playgroud)

文件是立即打开还是仅在我开始使用生成器表达式时才访问文件系统?

python generator generator-expression operator-precedence

4
推荐指数
2
解决办法
96
查看次数

Python"for in"循环打印列表中的最后一项

最近我学习了列表和for循环,以及.pop()指示和删除列表中最后一项的命令.

所以我试着编写一个代码来逐个删除列表中的最后一项,直到它只剩下一个项目.

代码是:

list_A = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

for i in list_A:
    print(list_A.pop())
    if 'c' not in list_A:
        break

print("job done.")
Run Code Online (Sandbox Code Playgroud)

python 3.6的输出给了我:

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
j
i
h
g
f
job done.
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它确实有效,但只有一半呢?

我在期待:

j
i
h
g
f
e
d
c
job done
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果它返回一些错误,我会更舒服,这意味着代码不正确.但为什么它有效,但不是完整的方式?

python for-loop list python-3.x

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

迭代使用自己的输出的数组的最佳方法

首先,我想为措辞严厉的标题道歉 - 我目前无法想到一个更好的方式来表达它.基本上,我想知道是否有更快的方法在Python中实现数组操作,其中每个操作以迭代方式依赖于先前的输出(例如,前向差分操作,过滤等).基本上,操作的形式如下:

for n in range(1, len(X)):
    Y[n] = X[n] + X[n - 1] + Y[n-1]
Run Code Online (Sandbox Code Playgroud)

X值的数组在哪里,Y是输出.在这种情况下,Y[0]假设在上述循环之前单独知道或计算.我的问题是:是否有NumPy功能来加速这种自引用循环?这是几乎所有脚本的主要瓶颈.我知道NumPy例程可以从C例程执行中受益,所以我很好奇是否有人知道任何有助于此的numpy例程.否则,是否有更好的方法来编程这个循环(在Python中),这将加速其对大数组大小的执行?(> 500,000个数据点).

python arrays performance loops numpy

4
推荐指数
3
解决办法
496
查看次数

从python3中的数组中删除元素

在Python3中,如何删除数组元素?我已经尝试过了,像这样:

In [1]: arr=[13,14,67,23,9]

In [2]: arr.remove(2)
Run Code Online (Sandbox Code Playgroud)

我想删除第3个position元素,但它抛出此错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-50-67be49ced0b0> in <module>()
----> 1 arr.remove(2)

ValueError: list.remove(x): x not in list
Run Code Online (Sandbox Code Playgroud)

python list python-3.5

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