2014-09-04 40 views
0

在Python的numpy的,我可以這樣做:如何用微風切片在任意指數上?

>>> import numpy as np 
>>> m = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) 
>>> indices = [1,3] 
>>> m[:,indices] 
array([[ 2, 4], 
     [ 6, 8], 
     [10, 12]]) 

換句話說,我可以切片基於指數的任意(不一定是連續的)名單上。我如何在Breeze中做類似的事情?我正在尋找一些有效的,最好是優雅的東西。

回答

3

或多或少相同,以numpy的:

scala> import breeze.linalg._ 
import breeze.linalg._ 

scala> val m = DenseMatrix((1,2,3,4),(5,6,7,8),(9,10,11,12)) 
m: breeze.linalg.DenseMatrix[Int] = 
1 2 3 4 
5 6 7 8 
9 10 11 12 

scala> val indices = IndexedSeq(1,3) 
indices: IndexedSeq[Int] = Vector(1, 3) 

scala> m(::, indices) 
res0: breeze.linalg.SliceMatrix[Int,Int,Int] = 
2 4 
6 8 
10 12 
+0

感謝您的快速響應!當我嘗試你在這裏顯示的同樣的東西時,我得到「錯誤:無法找到參數canSlice的隱式值:breeze.linalg.support.CanSlice2 [breeze.linalg.DenseMatrix [Int],collection.immutable。::。類型,IndexedSeq [Int],結果]。我使用的是版本2.10-0.7。這個功能比那個更新嗎?如果是這樣,任何建議的解決方法(除了升級)? – Mark 2014-09-04 15:50:23

+0

我正在轉移到更新的版本,順便說一句,它可能需要一段時間才能完成 – Mark 2014-09-04 16:16:15

+0

剛剛能夠在2.10-0.8.1上進行測試同樣的問題 – Mark 2014-09-04 16:59:32