Я создаю пару многомерных массивов с использованием NumPy и инициализируя их на основе индекса следующим образом:
pos_data = []
# Some typical values
d = 2 # Could also be 3
vol_ext = (1000, 500) # If d = 3, this will have another entry
ratio = [5.0, 8.0] # Again, if d = 3, it will have another entry
for i in range(d):
pos_data.append(np.zeros(vol_ext))
if d == 2:
for y in range(vol_ext[1]):
for x in range(vol_ext[0]):
pos_data[0][x, y] = (x - 1.0) * ratio[0]
pos_data[1][x, y] = (y - 1.0) * ratio[1]
elif d == 3:
for z in range(vol_ext[2]):
for y in range(vol_ext[1]):
for x in range(vol_ext[0]):
pos_data[0][x, y, z] = (x - 1.0) * ratio[0]
pos_data[1][x, y, z] = (y - 1.0) * ratio[1]
pos_data[2][x, y, z] = (z - 1.0) * ratio[2]
Цикл тоже немного уродливый и медленный. Кроме того, если у меня есть трехмерный объект, тогда у меня должен быть другой вложенный цикл.
Мне было интересно, есть ли Pythonic способ генерировать эти значения, поскольку они основаны только на индексах x, y и z. Я попытался использовать бит combinatorics от itertools
, но я не мог заставить его работать.