Ответ 1
a = np.arange(10)
a[[range(3)+range(6,9)]] = 10
#or a[[0,1,2,6,7,8]] = 10
print a
который должен работать, я думаю... Я не знаю, что его совсем то, что вы хотите, хотя
В Matlab вы можете присвоить значение нескольким срезам одного и того же списка:
>> a = 1:10
a =
1 2 3 4 5 6 7 8 9 10
>> a([1:3,7:9]) = 10
a =
10 10 10 4 5 6 10 10 10 10
Как вы можете сделать это в Python с массивом numpy?
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[1:3,7:9] = 10
IndexError: too many indices
a = np.arange(10)
a[[range(3)+range(6,9)]] = 10
#or a[[0,1,2,6,7,8]] = 10
print a
который должен работать, я думаю... Я не знаю, что его совсем то, что вы хотите, хотя
Вы также можете использовать np.r_
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html
ii = np.r_[0:3,7:10]
a[ii] = 10
In [11]: a
Out[11]: array([ 10, 10, 10, 3, 4, 5, 6, 10, 10, 10])
Из http://docs.scipy.org/doc/numpy/user/basics.indexing.html (раздел "Индексные массивы" ). Обратите внимание, что индексы для требуемых фрагментов должны содержаться в 'np.array()'.
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[np.array([3, 3, 1, 8])]
array([7, 7, 9, 2])