ValueError:块和形状必须具有相同的长度/尺寸

时间:2017-07-05 06:24:26

标签: python numpy machine-learning dask

我读了书#34;介绍数据科学。大数据,机器学习等,使用Python工具" 第4章中有关于阻塞矩阵计算的代码:

and
    (
        ans.f_Name in ('Agree','Disagree') or res.f_Answer in    ('Agree','Disagree')
    )

我得到ValueError:

import dask.array as da
import bcolz as bc
import numpy as np
import dask

n = 1e4 #A

ar = bc.carray(np.arange(n).reshape(n/2,2)  , dtype='float64', rootdir     = 'ar.bcolz', mode = 'w') #B
y  = bc.carray(np.arange(n/2), dtype='float64', rootdir = 'yy.bcolz', mode = 'w') #B,

dax = da.from_array(ar, chunks=(5,5)) #C
dy = da.from_array(y,chunks=(5,5)) #C

XTX = dax.T.dot(dax) #D
Xy  = dax.T.dot(dy) #E

coefficients = np.linalg.inv(XTX.compute()).dot(Xy.compute()) #F

coef = da.from_array(coefficients,chunks=(5,5)) #G

ar.flush() #H
y.flush() #H

predictions = dax.dot(coef).compute() #I
print (predictions)

问题是什么?

1 个答案:

答案 0 :(得分:3)

问题出在这里:

np.arange(n/2).reshape(n)

您创建了一个大小为n/2的数组,然后尝试将reshape大小调整为n。您无法使用reshape更改尺寸。

这可能是一个复制/粘贴错误?它不在您的原始代码中,而您似乎正在执行

np.arange(n).reshape(n/2,2)

其他地方,只要n是偶数,就会有效(小心,如​​果n不是,即使这也会失败。)