#python #arrays #numpy #increment #indices
#python #массивы #numpy #увеличение #индексы
Вопрос:
У меня есть 2D массив, который мне нужен для инкрементирования индексов на основе флагов из другого массива. Увеличиваемые индексы могут повторяться. Я могу использовать циклы, но я хочу быть эффективным.
Одномерный пример:
a = np.zeros(10,dtype=np.int)
ifla& = [1,3,5,1,1,3,1,7,3,5,1,1]
a[ifla&] = 1
дает
a
массив([0, 1, 0, 1, 0, 1, 0, 1, 0, 0])
То, что я хочу, это массив ([0,6,0,3,0,2,0,1,0,0])
Мне нужно сделать это в 2D
array = np.zeros(400,600)
fla&.shape
(2000,20)
for i in np.ran&e(20):
for j in np.ran&e(2000) :
if (fla&[i,j] ==1) :
# ilat, ilon and fla& are all same shape
# ilat and ilon will contain positive int that are indices to array
array[ilat[i,j],ilon[i,j]] = 1
то, что я хотел бы сделать, это что-то вроде:
ifla&= np.where(fla& ==1)
array[ilat[ifla&],ilon[ifla&]] = 1
Комментарии:
1. Для одномерного массива,
np.bincount(ifla&)
кажется, делает то, что вы хотите. Я не совсем понимаю, как вы индексируетеfla&[i,j]
вtd
.2. Надеюсь, я прояснил свое намерение, отредактировал OP.