ValueError:形状为(1,)的不可广播的输出操作数与广播形状(0,)不匹配

时间:2019-12-26 18:25:23

标签: python arrays algorithm sorting mergesort

我试图理解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)

1 个答案:

答案 0 :(得分:0)

好吧,我想通了,您不能将元素添加到空数组中。

我用条件

解决了它
if len(a[i:]) != 0:
   c += a[i:]