2017-03-22 51 views
0

我想快速访问np.array元素,例如从索引0-6加10到最后。到目前为止,我曾尝试:访问部分np.array

a[0:6,10:] 

np.concatenate(a[0:6],a[10:]) 

两者都是给我的错误,用第二个给我:“类型错误:只有整数标阵列可以被转换成一个标量指数”

编辑:串连仍然给我的问题,所以我要在这里发布我的全码:

Fold_5 = len(predictorX)/5 
trainX = np.concatenate(predictorX[:3*int(Fold_5)],predictorX[4*int(Fold_5)]) 

预测器X是具有如下值的阵列:

[[0.1,0.4,0.6,0.2],[..]....] 

回答

1

在:

a[0:6,10:] 

0:6选择行,10:选择列。如果a不是2d或足够大,将导致错误。

np.concatenate(a[0:6],a[10:]) 

问题是参数的数量;它需要一个数组列表。第二个,如果给出被理解为axis,应该是一个整数(因此你的错误)。

np.concatenate([a[0:6],a[10:]]) 

应该工作。

另一种选择是使用索引列表

a[0,1,2,3,4,5,10,11,...]] 

np.r_是构建这样一个列表方便的小工具:

In [73]: np.r_[0:6, 10:15] 
Out[73]: array([ 0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14]) 

它的效果确实np.concatenate([np.arange(0,6),np.arange(10,15)])

无论您是先索引还是连接,或先连接索引再连接索引,都无关紧要。效率大致相同。 np.delete根据“删除”区域的大小和类型在几种方法中进行选择,包括这些方法。

trainX表达式中,将[]添加到连接调用应该起作用。但是,predictorX[4*Fold_5]可能会成为问题。你是否错过:(如10:示例)?如果您只需要一个值,则需要将其转换为1d,例如predictorX[[4*Fold_5]]

Fold_5 = len(predictorX)//5 # integer division in py3 
trainX = np.concatenate([predictorX[:3*Fold_5], predictorX[4*Fold_5:]]) 
0

np.concatenate获取数组序列。尝试

np.concatenate([a[0:6],a[10:]]) 

np.concatenate((a[0:6],a[10:])) 
1

以下是获得所需的子阵列的两个短的方式:

np.delete(a, np.s_[6:10]) 

np.r_[a[:6], a[10:]]