简体   繁体   中英

accessing portions of np.array

I want to have quick access to np.array elements for example from indexes from 0-6 plus 10 to the end. So far I have tried:

a[0:6,10:]

or

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

both are giving me error, with the second one giving me:"TypeError: only integer scalar arrays can be converted to a scalar index"

Edit: concatenate is still giving me problems, so I am going to post my full code here:

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

predictor X is an array with values like

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

Here are two more short ways of getting the desired subarray:

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

and

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

In:

a[0:6,10:]

0:6 selects rows, 10: selects columns. If a isn't 2d or large enough that will result in an error.

In

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

the problem is the number of arguments; it takes a list of arrays. A second one, if given is understood to be axis , which should be an integer (hence your error).

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

should work.

Another option is to index with a list

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

np.r_ is a handy little tool for constructing such a list:

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

It in effect does np.concatenate([np.arange(0,6),np.arange(10,15)]) .

It doesn't matter whether you index first and the concatenate, or concatenate indexes first and then index. Efficiency is about the same. np.delete chooses among several methods, including these, depending on the size and type of the 'delete' region.

In the trainX expression adding [] to the concatenate call should work. However, predictorX[4*Fold_5] could be a problem. Are you missing a : (as in 10: example)? If you want just one value, then you need to convert it to 1d, eg predictorX[[4*Fold_5]]

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

np.concatenate takes a sequence of arrays. try

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

or

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM