对不起,如果已经提出这个问题,我不确定究竟如何在句子中描述我的问题。我正在为生物信息学课程做一些工作,并且我已经开始看到在调用函数时声明的变量,而不是仅传递参数(参见下面的第5行)。
def sobelFilter(pixmap):
matrix = array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]])
grey = pixmap.mean(axis=2) #<---here
edgeX = convolveMatrix2D(grey, matrix)
edgeY = convolveMatrix2D(grey, matrix.T)
pixmap2 = sqrt(edgeX * edgeX + edgeY * edgeY)
normalisePixmap(pixmap2)
return pixmap2
grey = pixmap.mean(axis=2)
从未再次使用axis
时的目的是什么?为什么不说grey = pixmap.mean(2)
?
如果我的问题是必要的,这只是我们使用的代码,而不是我自己编写的代码。 Pixmap引用此代码:
def imageToPixmapRGB(img):
img2 = img.convert("RGB")
w,h = img2.size
data = img2.getdata()
pixmap = array(data, float)
pixmap = pixmap.reshape((h,w,3))
return pixmap
答案 0 :(得分:1)
没有一个名为axis
的局部变量被初始化,您只是明确说明要传递的函数的哪个参数。
如果函数中有多个可选参数,则可以使用此选项:
示例:
In [9]: def foo(x=2, y=2):
...: print(x, y)
...:
In [10]: foo(y=3)
2 3
如果我想更改y
,但保留x
为默认值,我必须指定何时调用该函数。
即使您没有设置特定的可选参数,但通过其关键字传递参数也没有错。
答案 1 :(得分:1)
由于=
,这看起来有点像变量赋值语法,但它实际上是一个非常不同的特性:
调用函数时,可以使用&#34;关键字参数&#34;指定要设置的变量。句法。这允许您按名称设置特定参数:
some_func(arg1, arg2, arg5=None)
这对于默认参数非常有用:
def x(a, b, c=None, d=None):
pass
如果您想使用普通语法设置d
,则必须为c
指定一个参数。
x(1, 2, None, "hi")
使用关键字参数语法,可以省略:
x(1, 2, d="hi")
在这种情况下,关键字参数通常也用于使参数的目的对读者清楚。如果你看到:
pixmap.mean(2)
目前还不清楚2
测量的内容。但是,如果你看到
pixmap.mean(axis=2)
您立即知道2
所指的内容及其原因
答案 2 :(得分:1)
pixmap
是一个numpy
数组,其维度为&gt; = 2.您可以通过打印pixmap.ndim
进行测试。
您引用的行是沿着轴计算数组的mean
。换句话说,axis
是mean
方法的参数。有关详细信息,请参阅numpy.mean
documentation。
您的正确之处在于axis
参数可能会被省略,即arr.mean(2)
相当于arr.mean(axis=2)
。为清楚起见,最有可能明确说明了这一点。