2017-04-10 52 views
-1

numpy.fromfunction使得与参数作为阵列的功能的单个调用,如描述在例如this answer。所以要使用numpy.from函数,需要该函数接受数组参数并返回一个数组。如何根据为每个元素调用的函数制作numpy数组?

如何使numpy的阵列基于称为对于每个元件,其中函数返回标为元件的功能,如例如使用max函数像下面?

z = numpy.fromfunction(max, (2, 2), dtype=int) 

这将然后返回:

[[0 1] 
[1 1]] 
+0

不知道我得到您的问题:z将是标量,为什么它应该是一个数组? – Roelant

+2

你为什么不只是使用'np.max'或者如果你想使用其他功能,那是什么是什么呢?在numpy中没有等价物吗? – Kasramvd

+0

@ Kasramvd:Max只是一个示例函数;这个问题仍然被认为是一个通用解决方案。 – EquipDev

回答

2

您可以使用numpy.vectorize

vmax = numpy.vectorize(max) 
z = numpy.fromfunction(vmax, (2, 2), dtype=int) 

请虽然注意从文档这样一句话:

矢量化功能主要由fo提供方便,而不是表现。实现本质上是一个for循环。

就其性质而言numpy.vectorize会很慢。在这个例子中numpy.maximum将快得多:

z = numpy.fromfunction(numpy.maximum, (2, 2), dtype=int) 
+0

对于一般的解决办法是罚款。写这样的,当我的工程业绩会更高,如果代码,然后执行太慢我稍后会优化:-) – EquipDev

+1

我明白了。我只是争辩说,你应该尝试尽可能使用'numpy'功能。 –

相关问题