2014-12-16 3 views
0

Я очень новичок в этом, так что извиняюсь, но, надеюсь, у меня есть синтаксис, так что вы понимаете мой вопрос!
У меня есть Numpy массив с формой (2,2,2)Написание массива 3D numpy в файлы, включая его индексы

array([[[ 1, 1], 
     [ 2, 2]], 

     [[ 3, 3], 
     [ 4, 4]]]) 

как я пишу его в файл, так что список индексов и значение массива т.е.

0 0 0 1 
1 0 0 3 
0 1 0 2 
1 1 0 4 
0 0 1 1 
1 0 1 3 
0 1 1 2 
1 1 1 4 

спасибо , Ingrid.

ответ

1

Вы можете использовать numpy.ndenumerate

a = np.array([[[1, 1], 
       [2, 2]], 

       [[3, 3], 
       [4, 4]]]) 

for items in np.ndenumerate(a): 
    print(items) 

Выход

((0, 0, 0), 1) 
((0, 0, 1), 1) 
((0, 1, 0), 2) 
((0, 1, 1), 2) 
((1, 0, 0), 3) 
((1, 0, 1), 3) 
((1, 1, 0), 4) 
((1, 1, 1), 4) 

Чтобы удалить скобки можно распаковать все

for indexes, value in np.ndenumerate(a): 
    x,y,z = indexes 
    print(x,y,z,value) 

Выход

0 0 0 1 
0 0 1 1 
0 1 0 2 
0 1 1 2 
1 0 0 3 
1 0 1 3 
1 1 0 4 
1 1 1 4 

Для обработки записи файла

with open('file.txt', 'w') as f: 
    for indexes, value in np.ndenumerate(a): 
     x,y,z = indexes 
     f.write('{} {} {} {}\n'.format(x,y,z,value)) 
+0

бы которые работают с np.savetext, чтобы записать его в файл? и если да, то я могу снять скобки? – idem

+0

, что все работает отлично, но я получаю ошибкуTypeError: join() missing 1 обязательный позиционный аргумент: 'seq' – idem

+0

спасибо! это работает! – idem

0

Не уверен, что это лучший способ сделать это в NumPy, но вы можете сделать это, используя комбинацию numpy.unravel_index, numpy.dstack и numpy.savetxt:

>>> arr = np.array([[[ 1, 1], 
     [ 2, 2]], 

     [[ 3, 3], 
     [ 4, 4]]]) 
>>> a = np.dstack(np.unravel_index(np.arange(arr.size), 
                arr.shape) + (arr.ravel(),)) 
>>> np.savetxt('foo.txt', a[0,...], fmt='%d') 
>>> !cat foo.txt 
0 0 0 1 
0 0 1 1 
0 1 0 2 
0 1 1 2 
1 0 0 3 
1 0 1 3 
1 1 0 4 
1 1 1 4 
Смежные вопросы