2016-04-12 55 views
0

Bir 3465 x 50157 NumPy matrisim var ve matrisin seçilen sütunundaki her benzersiz değeri bir eşik değeri olarak kullanarak belirli bir hesabı test etmeye çalışıyorum. Bu, numpy bana aşağıdaki hata veriyor çalıştırırkenNumune benzersiz() döndürme dizisi yerine skaler

feat_num = 4 
thresholds = np.unique(X[:, feat_num]) 

for thresh in thresholds: 
    y_left = np.array([ 
     y[i] for i in range(X.shape[0]) if X[i, feat_num] < thresh 
    ]) 

: Aşağıdaki örneği inceleyin:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(). 

Ben X[i, feat_num] bir sayıl olduğunu doğruladı, yani orada hiçbir sorun yoktur. Ancak, bazı nedenlerle, thresh bir çeşit diziye değerlendiriyor. X sadece büyük bir tamsayı matrisi olduğu için bunun nasıl olabileceğini anlamıyorum.

Neler olup bittiğini gören var mı?

+0

y nedir? ya da X sadece bir dizi şekli –

+0

ve 'thresh' de sorgunuzda açıklanmıştır aynı zamanda bir skaler nedir? – hpaulj

cevap

0

Sorun, bir ndarray numaralı numaradan ziyade matrix numolyosunu kullanmanızdır. İkincisi daha genel yaratıklar ve bunları kullanmanı öneririm. matrix türünün avantajlarından biri, cebirsel işlemlerin matrislerden beklediğiniz gibi çalıştığıdır, ancak bu gereksinim nadiren de olsa, numpy.dot bu durumda ndarray nesnelerle çalışmasını sağlamak için kullanılabilir.

Dolayısıyla, sorun matrix bir kolon dilim yani, bir sütun vektördür olduğu bir (listelerin liste eşdeğerdir) şekil (N,1) arasında matrix. Orijinal dizi bir ndarray ise olurdu, yani daha sonra kolon dilim şeklini (N,) sahip olan bir 1d yerine gerçek bir kolon vektörü daha (düz listeler uyumlu) ndarray:

>>> import numpy as np 
>>> X = np.random.rand(3,3) 
>>> Xmat = np.asmatrix(X) 
>>> 
>>> print(X[:,1]) 
[ 0.28797057 0.56186287 0.58674852] 
>>> print(Xmat[:,1]) 
[[ 0.28797057] 
[ 0.56186287] 
[ 0.58674852]] 

kolon vektörü üzerinde döngü olacak Beklentilerinizin aksine, skalerlerden ziyade size listeler verin.

Herhangi bir yerde matris işlemlerini kullanmıyorsanız, o zaman geçerli sorununuzu da çözmesi gereken np.array nesnesine geçiş yapmanızı şiddetle öneririm.