我试图理解mergeSort算法并运行此链接(https://medium.com/@ssbothwell/counting-inversions-with-merge-sort-4d9910dc95f0)上提供的代码
但是,我收到错误ValueError:形状为(1,)的不可广播的输出操作数与广播形状(0,)不匹配
由于代码在较小的示例(例如arr = [1、20、6、4、5])上工作时,我无法理解为什么会发生这种情况。 (数组测试包含50个随机数)
有人可以解释我在做什么错吗?有人也可以解释一下何时获得shape(0,)吗?是数组为空吗?
test = numbers[0:50]
def mergeSortInversions(arr):
if len(arr) == 1:
return arr, 0
else:
mid = len(arr)//2
a = arr[:mid]
b = arr[mid:]
a, ai = mergeSortInversions(a)
b, bi = mergeSortInversions(b)
c = []
i = 0
j = 0
inversions = 0 + ai + bi
while i < len(a) and j < len(b):
if a[i] <= b[j]:
c.append(a[i])
i += 1
else:
c.append(b[j])
j += 1
inversions += (len(a)-i)
c += a[i:]
c += b[j:]
return c, inversions
arr = [1, 20, 6, 4, 5]
#print('test', np.shape(test))
x, inv = mergeSortInversions(test)
print(inv)
答案 0 :(得分:0)
好吧,我想通了,您不能将元素添加到空数组中。
我用条件
解决了它if len(a[i:]) != 0:
c += a[i:]