2017-07-05 19 views
0

私は「データサイエンスの紹介」で、Pythonツールを使用して大きなデータや機械学習などを学んでいます。 第4章でブロック計算に関するコードがあります: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) 

私はValueErrorを出る:

ValueError        Traceback (most recent call last) 
<ipython-input-4-7ae8e9cf2346> in <module>() 
    10 
    11 dax = da.from_array(ar, chunks=(5,5)) #C 
---> 12 dy = da.from_array(y,chunks=(5,5)) #C 
    13 
    14 XTX = dax.T.dot(dax) #D 

C:\Users\F\Anaconda3\lib\site-packages\dask\array\core.py in from_array(x, chunks, name, lock, fancy, getitem) 
    1868  >>> a = da.from_array(x, chunks=(1000, 1000), lock=True) # doctest: +SKIP 
    1869  """ 
-> 1870  chunks = normalize_chunks(chunks, x.shape) 
    1871  if len(chunks) != len(x.shape): 
    1872   raise ValueError("Input array has %d dimensions but the supplied " 

C:\Users\F\Anaconda3\lib\site-packages\dask\array\core.py in normalize_chunks(chunks, shape) 
    1815    raise ValueError(
    1816     "Chunks and shape must be of the same length/dimension. " 
-> 1817     "Got chunks=%s, shape=%s" % (chunks, shape)) 
    1818 
    1819  if shape is not None: 

ValueError: Chunks and shape must be of the same length/dimension. Got chunks=(5, 5), shape=(5000,) 

問題は何ですか?

+0

配列 'y'は次元が1つしかありませんが、' chunks = 'パラメータに2つの数値を与えています。 – mdurant

答えて

3

問題はここにある:

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

あなたはサイズn/2の配列を作成し、サイズnreshapeそれはしてみてください。 reshapeでサイズを変更することはできません。

おそらくコピー/ペーストミスですか?それはあなたの元のコードではありませんし、(nもこれも失敗しない場合には、注意が必要。)限りnが偶数であるとして働く、あなたが他の場所

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

をやっているようだ

関連する問題