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

2024-04-20 04:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试理解mergeSort算法并运行此链接(https://medium.com/@ssbothwell/counting-inversions-with-merge-sort-4d9910dc95f0)上提供的代码

但是,我得到了错误值error:形状为(1,)的不可广播输出操作数与广播形状(0,)不匹配。

我无法理解为什么会出现这种情况,因为代码在arr=[1,20,6,4,5]这样的小示例上工作。(数组测试包含50个随机数)

有人能解释一下我做错了什么吗?有人能解释一下我们什么时候得到形状(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)

Tags: 代码testlenreturnif数组elseai