ValueError:所有输入数组必须具有相同的维数,(numpy错误)

时间:2018-01-03 02:25:49

标签: python arrays numpy

test = np.array([20, 21, 22, 23, 22, 21])
test = test.astype(float)
result = np.zeros((1,1))
for i in range(len(test)-3):
    d = np.abs(test[i+3]-test[i])
    #print(d)
    v = 0
    for j in range(3):
        v = v + np.asscalar(
                np.abs(test[i+3-j] - test[i+3-(j+1)]))
    out = d / v
    result = np.hstack((result, out))

我希望这段代码的结果是像这样的numpy数组的形状 - > (3,1) 正常输出最初应如下所示:[1,0.333,0.333] 但是,当我运行此代码时,我收到了类似标题的错误。

1 个答案:

答案 0 :(得分:0)

test = np.array([20, 21, 22, 23, 22, 21])
test = test.astype(float)

test是(6,)形状数组

result = np.zeros((1,1))

result是(1,1)

for i in range(len(test)-3):
    d = np.abs(test[i+3]-test[i])
    #print(d)
    v = 0
    for j in range(3):
        v = v + np.asscalar(
                np.abs(test[i+3-j] - test[i+3-(j+1)]))
    out = d / v

out是一个标量,对吧?

    result = np.hstack((result, out))

hstack将其输入转换为数组:

In [4]: np.array(3).shape
Out[4]: ()

尝试将(1,1)数组与()数组连接会产生此错误:

In [3]: np.hstack((np.zeros((1,1)), 3))
ValueError: all the input arrays must have same number of dimensions

通常,如果要在循环中连接多个值,最好将它们连接到一个列表中,然后创建一个数组。列表append更快。

result = []
for i in range...

    result.append(out)
result = np.array(result)

那就是说,我怀疑这可以在没有循环的情况下计算出来,尽管我需要花时间并彻底了解你要先做的事情。逻辑并不明显。