Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本Python:将字符串作为输入传递给函数_Python_String_For Loop - Fatal编程技术网

基本Python:将字符串作为输入传递给函数

基本Python:将字符串作为输入传递给函数,python,string,for-loop,Python,String,For Loop,我刚开始学习python。我有4个变量F_1,F_2,F_3和F_4。每个都包含一个矩阵。我想计算它们中的非零值。所以我写了一个循环 f_1 = thresh1[1:mr, 1:mc] f_2 = thresh1[1:mr, (mc+1):width] f_3 = thresh1[(mr+1):height, 1:mc] f_4 = thresh1[(mr+1):height, (mc+1):width] b_1 = thresh2[1:mr, 1:mc] b_2 = thresh2[1:m

我刚开始学习python。我有4个变量F_1,F_2,F_3和F_4。每个都包含一个矩阵。我想计算它们中的非零值。所以我写了一个循环

f_1 = thresh1[1:mr, 1:mc]
f_2 = thresh1[1:mr, (mc+1):width]
f_3  = thresh1[(mr+1):height, 1:mc]
f_4 = thresh1[(mr+1):height, (mc+1):width]

b_1 = thresh2[1:mr, 1:mc]
b_2 = thresh2[1:mr, (mc+1):width]
b_3  = thresh2[(mr+1):height, 1:mc]
b_4 = thresh2[(mr+1):height, (mc+1):width]

for i in range(1, 5):
    n1 = "f_"
    n2 = "b_"
    num = str(i)
    n1 += num
    n2 += num

    r = cv2.countNonZero((n1)/cv2.countNonZero(n2))
    print r
我想把串接的字符串n1和n2作为输入传递给等式cv2.countNonZeron1/cv2.countNonZeron2

这里F1是前景中的二值图像F,B1也是背景中的二值图像B。我试图计算前景和背景中非零像素的比率


应计算F1/B1的r,并在下一次迭代中计算F2/B2。。。因此,您有一个问题,您试图使用字符串引用变量名。这是相当困难的;最好使用列表来包含图像。也就是说,不要试图引用f_1、f_2等,而是创建一个名为f的列表,其中包含每个图像

例如,使用以下代码代替顶部的代码:

f = [
  thresh1[1:mr, 1:mc],
  thresh1[1:mr, (mc+1):width],
  thresh1[(mr+1):height, 1:mc],
  thresh1[(mr+1):height, (mc+1):width]
]

b = [
  thresh2[1:mr, 1:mc],
  thresh2[1:mr, (mc+1):width],
  thresh2[(mr+1):height, 1:mc],
  thresh2[(mr+1):height, (mc+1):width]
]
现在,您可以使用代码f[1]引用之前调用的f_1

现在,在循环中,您可以使用:

for i in range(1, 5):
    r = cv2.countNonZero(f[i])/cv2.countNonZero(b[i])
    print r
我建议您研究如何在Python中使用列表,因为这是一种基本的数据结构。此外,f_1是一个字符串,f_1是一个名为f_1的变量,两者之间存在差异。你不能轻易地介于两者之间

f_1_nz = f_1[f_1 != 0].size
# etc.

r_1 = f_1_nz / b_1_nz
# etc.
理想情况下,您可以将f_1等放入一个列表中并对其进行迭代,而不是为每个列表定义新名称,请参见@apnorton给出的答案

因此,最后:

for ff, bb in zip(f,b):
    f_nz = ff[ff != 0].size
    b_nz = bb[bb != 0].size
    print f_nz/b_nz

r中的方程式是什么?我有点困惑,好像你在用字符串n1除以整数cv.countnonzeronn2。这真的是编译吗?你能举个例子说明你想做什么吗?我认为这个问题很容易混淆,你想把n1传递给一个函数,它的值是字符串,lit的值与变量f_1的名称相同。但您的实际意图是传递f_1的变量值。你这样做是为了你可以循环并传递这个系列的多个变量。是的,这就是最初的意图。很抱歉,缺乏明确性,但美联社诺顿的建议非常有效。我想我需要尽快学习python中的数据结构语法!谢谢大家抽出时间