Я пишу код для группировки точек вокруг каждой точки кривой в концентрические области. Затем я нахожу геометрическую медиану каждого региона как способ определения его «формы».
Индексы точек определяются операторами np.where для каждого региона, и все операторы np.where являются помещается в один массив np, чтобы упростить индексацию и обработку, если в регионе нет точек. Этот основной массив dtype также является объектом, поскольку каждая область имеет разное количество точек.
Однако в том редком случае, когда каждая область имеет одинаковое количество точек, структура массива не меняется, но целые числа в каждом массиве np.where изменяются с numpy ints на python int. Это проблема, потому что когда я использую эти значения в качестве индексов, я получаю ошибку индекса:
IndexError: arrays used as indices must be of integer (or boolean) type
Это код, который у меня есть, и то, что я пробовал:
z = np.array([0,0.04,0.8,1.2,1.6,2])
for j in range(1,n1-1): #1 to n1-2, ignoring the initial and final parts
print(j)
r_a = j_r[j-1,0] r_b = j_r[j-1,1]
dist_a = s_dist[j][:j]
dist_b = s_dist[j][j+1:]
dist_pt_a = np.array([np.where((dist_a = r_a*z[0]))[0], #a: r1
np.where((dist_a = r_a*z[1]))[0], #a: r2
np.where((dist_a = r_a*z[2]))[0], #a: r3
np.where((dist_a = r_a*z[3]))[0], #a: r4
np.where((dist_a = r_a*z[4]))[0]], dtype=object) #a: r5
dist_pt_b = np.array([np.where((dist_b = r_b*z[0]))[0] + (j+1), #b: r1
np.where((dist_b = r_b*z[1]))[0] + (j+1), #b: r2
np.where((dist_b = r_b*z[2]))[0] + (j+1), #b: r3
np.where((dist_b = r_b*z[3]))[0] + (j+1), #b: r4
np.where((dist_b = r_b*z[4]))[0] + (j+1)], dtype=object) #b: r5
#What's happening:
#THE GOOD
#the array with 5 regions, each of differing length
dist_pt_b: [array([1081, 1082, 1083], dtype=int64)
array([1084, 1085, 1086], dtype=int64)
array([1087, 1088], dtype=int64)
array([1089, 1090, 1091, 1092], dtype=int64)
array([1093, 1094, 1095], dtype=int64)]
#the first region
r (0): [1081 1082 1083],
#the first index in the first region
r (0): 1081,
#is indexable to that cartesian point
r (0): [[ 0.96494 23.29605851][ 0.97084 23.29796217][ 0.98314 23.30293551]]
#THE BAD
#массив из 5 областей одинаковой длины
dist_pt_b: [[1082 1083 1084][1085 1086 1087][1088 1089 1090][1091 1092 1093][1094 1095 1096]]
#the first region
r (0): [1082 1083 1084],
#the first index in the first region
r (0): 1082,
#INDEX ERROR
127 print(f'r ({r}): {dist_pt_b[r]}, {type(dist_pt_b[r])}')
128 print(f'r ({r}): {dist_pt_b[r][0]}, {type(dist_pt_b[r][0])}')
--> 129 print(f'r ({r}): {s_n[dist_pt_b[r]]}')
130 dist_pt_b[r] = np.mean(s_n[dist_pt_b[r]], axis = 0)
131 theta_s_b[2r], theta_s_b[2r+1] = dist_pt_b[r]
IndexError: arrays used as indices must be of integer (or boolean) type
Подробнее здесь: https://stackoverflow.com/questions/793 ... umpy-array
Numpy ints преобразуются в целые числа Python в массиве numpy ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Гсон. Десериализовать целые числа как целые числа, а не как двойные числа.
Anonymous » » в форуме JAVA - 0 Ответы
- 95 Просмотры
-
Последнее сообщение Anonymous
-