我正试图在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])