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] 但是,当我运行此代码时,我收到了类似标题的错误。
答案 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)
那就是说,我怀疑这可以在没有循环的情况下计算出来,尽管我需要花时间并彻底了解你要先做的事情。逻辑并不明显。