如何在python中定义匿名函数,其中bahaviour应该在definiton-time取决于局部变量的值,并且还接受参数
例:
def callback(val1, val2):
print "{0} {1}".format(val1, val2)
i = 0
f0 = lambda x: callback(i, x)
i = 1
f1 = lambda x: callback(i, x)
f0(8) # prints "1, 8: but I'd like "0, 8" (value of 'i' when f0 was defined)
f1(8) # prints "1, 8"
Run Code Online (Sandbox Code Playgroud)
这样的事情可能没有将我的回调包装在自己的类中吗?
我正在尝试对其A元素为索引的数组进行排序.索引引用另一个数组,B其值将决定其顺序A.所以,我想对A这种情况进行排序B[ A[i] ].
例如:
A = [0, 1, 4, 5, 7] B = [5, 3, 8, 2, 2, 7, 1, 6, 3, 9]
排序A将是
A' = [ 7, 4, 1, 0, 5 ]
这可能与C的内置排序,或者我将不得不编写自己的实现?
编辑:这些数组是局部函数变量.
我正在尝试分离连接的对象.似乎Python和分水岭算法(scipy实现)非常适合处理这个问题.
这是我的图像和自动生成的分水岭种子点(阈值和距离变换图像的局部最大值):
seeds = myGenSeeds( image_grey )
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好; 每个物体都有种子.
当我运行分水岭时,情况会崩溃:
segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`
Run Code Online (Sandbox Code Playgroud)

顶部 - 中间集群和中心集群都很难分开.在顶部群集中,一个对象充斥着另外两个对象.在中心星团中,虽然它可能太小而无法看到,但是中心种子只能淹没到几个像素.
我有两个问题:
在关于在Module :: Build模块中编译c代码的这个问题中,建议用它c_source来指定c/c ++源代码的位置.
此配置选项导致将源编译为目标文件,并将目录添加到链接器的搜索路径.
我想知道是否可以实现类似的配置,其中所有.c文件都编译为独立的可执行文件,并安装在bin/脚本旁边.
我有一个多维numpy数组,试图将其粘贴到熊猫数据框中。我想展平数组,并创建一个反映预展平数组索引的熊猫索引。
请注意,我使用3D来缩小示例,但我想将其推广到至少4D
A = np.random.rand(2,3,4)
array([[[ 0.43793885, 0.40078139, 0.48078691, 0.05334248],
[ 0.76331509, 0.82514441, 0.86169078, 0.86496111],
[ 0.75572665, 0.80860943, 0.79995337, 0.63123724]],
[[ 0.20648946, 0.57042315, 0.71777265, 0.34155005],
[ 0.30843717, 0.39381407, 0.12623462, 0.93481552],
[ 0.3267771 , 0.64097038, 0.30405215, 0.57726629]]])
df = pd.DataFrame(A.flatten())
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成像这样的x / y / z列:
A z y x
0 0.437939 0 0 0
1 0.400781 0 0 1
2 0.480787 0 0 2
3 0.053342 0 0 3
4 0.763315 0 1 0
5 0.825144 0 1 1
6 0.861691 …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的熊猫系列:
measure
0 0.3
6 0.6
9 0.2
11 0.3
14 0.0
17 0.1
23 0.9
Run Code Online (Sandbox Code Playgroud)
和像这样的numpy数组:
array([[ 0, 0, 9, 11],
[ 6, 14, 6, 17]])
Run Code Online (Sandbox Code Playgroud)
如何从numpy数组中的值到系列中的索引进行查找以获得:
array([[ 0.3, 0.3, 0.2, 0.3],
[ 0.6, 0.0, 0.6, 0.1]])
Run Code Online (Sandbox Code Playgroud) 有没有办法为你期望死的Perl调用编写测试?我想验证某些调用会因格式错误的输入而死亡.
sub routine_a {
my $arg = shift;
die if $arg eq 'FOO';
print "routine_a: $arg\n";
}
sub routine_b {
my $arg = shift;
die if $arg eq 'BAR';
print "routine_b: $arg\n";
}
sub test_all {
assert( routine_a("blah") );
assert( routine_b("blab") );
assert_death( routine_a("FOO") );
assert_death( routine_b("BAR") );
}
Run Code Online (Sandbox Code Playgroud) 如何获取文档中numpy.random描述的可用发行版列表?
我正在编写一个会产生噪音的命令行实用程序。我想获取每个可用的发行版,并获取它们所需的参数以生成命令行选项。
我几乎可以做这样的事情:
import numpy as np
distributions = filter( lambda elt: not elt.startswith("__"), dir(np.random) )
Run Code Online (Sandbox Code Playgroud)
...但是这个列表包含额外的东西(例如shuffle,get_state),它们不是分布。
是否可以在scipy.ndimage.filters.generic_filter滤波器功能中获得"当前元素" ?
例如,如果A[0]始终包含当前元素(似乎不是这种情况),则以下内容可能会找到局部最大值
def local_max_f(A) :
return A[0] == A.max()
img = np.random.rand(100).reshape(10,10)
ndimage.generic_filter( img, local_max_f, size=3 )
Run Code Online (Sandbox Code Playgroud) 从 pytest文档:
@pytest.mark.parametrize 允许在测试函数或类中定义多组参数和装置。
看起来这意味着pytest.mark.parametrize可以将测试标记为使用多组装置运行?我可以找到很多参数化参数的例子,但我不知道如何参数化不同的装置集。
我认为这个答案很接近,但这实际上只是参数化参数,然后解决测试主体中的不同固定装置。
是否可以使用不同的夹具将测试标记为多次运行?
注意我正在尝试做这样的事情:
import pytest
# some data fixutres
@pytest.fixture()
def data1():
"""Create some data"""
@pytest.fixture()
def data2():
"""Create some different data"""
@pytest.fixture()
def data3():
"""Create yet different data"""
# The tests
@pytest.mark.parametrize('data', [data1, data2])
def test_foo(data):
"""Test something that makes sense with datasets 1 and 2"""
@pytest.mark.parametrize('data', [data2, data3])
def test_bar(data):
"""Test something that makes sense with datasets 2 and 3"""
Run Code Online (Sandbox Code Playgroud)