如何在python中将整个numpy数组作为参数传递给用户定义的函数



我正试图在python中实现一个SelectionSort算法,因此我创建了一个numpy数组,并希望将其作为算法中的参数传递。

def SelectionSort(array=None):
for i in range(len(array)):
for j in range(i+1,len(array)):    
if(array[j]<array[i]):
array[i],array[j]=array[j],array[I]

但我得到了这个值错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-fddcbe25a509> in <module>
----> 1 SelectionSort(np.array([2,5,6,3,7,2,4]))
<ipython-input-11-a238fe8a1004> in SelectionSort(array, length_of_random_array)
1 def SelectionSort(array=None,length_of_random_array=None):
----> 2     if(array==None):
3         array = np.random.randint(-10000,10000,size=length_of_random_array)
4 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我认为它正在尝试将算法应用于数组的每个元素。

1 def SelectionSort(array=None,length_of_random_array=None):
----> 2     if(array==None):
3         array = np.random.randint(-10000,10000,size=length_of_random_array)
4 

我认为它正在尝试将算法应用于数组的每个元素。

您是正确的:Numpy将操作应用于整个数组。理论上,您的测试可能会导致以下模糊的真值:

if (np.array([1,2,None]) == None):
if (np.array([False,False,True]):

使用is执行None-检查。None是一个单例,因此引用检查总是有效的。

if (<array defaulting to None> is None):
if (True):

这段代码对我来说运行得很好,只需要一个返回语句:

设置:

import numpy as np
def SelectionSort(array=None):
for i in range(len(array)):
for j in range(i+1,len(array)):    
if(array[j]<array[i]):
array[i],array[j]=array[j],array[i]
return array

执行:

arr = np.array([1,2,3,2,1])
SelectionSort(arr)

输出:

array([1, 1, 2, 2, 3])

最新更新