我想知道为什么许多函数 - 特别是在numpy中 - 使用元组作为函数参数?
e.g:
a = numpy.ones( (10, 5) )
可能是什么用途?为什么不简单地使用以下内容,因为第一个参数总是表示数组的大小?
a = numpy.ones(10, 5)
是否因为可能有其他参数,例如dtype?即便如此,
a = numpy.ones(10, 5, dtype=numpy.int)
对我来说似乎比使用复杂的元组约定更清晰。
感谢您的回复
答案 0 :(得分:3)
因为你希望能够做到:
a = numpy.ones(other_array.shape)
和other_array.shape
是一个元组。有一些功能与此不一致,并按照您的描述工作,例如: numpy.random.rand()
答案 1 :(得分:2)
我认为这样做的好处之一是它可以导致各种方法之间的一致性。我对numpy并不熟悉,但在我看来,第一个用例是如果numpy可以返回一个数组的大小,那个大小,作为一个变量,可以直接传递给另一个numpy方法,无需了解该大小项目的内部构造。
它的另一部分是数组的大小可能有两个组件,但它被讨论为一个值,而不是两个。
答案 2 :(得分:2)
我的猜测:这是因为在像np.ones
这样的函数中,shape
可以作为关键字参数传递,当它是单个值时。尝试
np.ones(dtype=int, shape=(2, 3))
并注意您获得的价值与np.ones((2, 3), dtype=int)
获得的价值相同。
[这在Python中更常用:
>>> def f(a, b):
... return a + b
...
>>> f(b="foo", a="bar")
'barfoo'
答案 3 :(得分:0)
为了让python告诉foo(1, 2)
,foo(1, dtype='int')
和foo(1, 2, dtype='int')
之间的区别,你必须使用仅在python 3之前正式引入的仅关键字参数。它是可以使用**kargs
在python 2.x中实现仅关键字参数,但它不自然,似乎不是Pythonic。我认为由于这个原因array
不允许array(1, 2)
,但reshape(1, 2)
没问题,因为reshape
不接受任何关键字。