Как перебрать этот n-мерный массив? - PullRequest
0 голосов
/ 13 октября 2019

Моя программа печатается как

1
2
3
3
4
5
10
5
12
13
6
14

Но я хочу напечатать массив этой формы

[[[ 1  2  3]
  [ 3  4  5]]

 [[10  5 12]
  [13  6 14]]]

# more than one dimensions 
import numpy as np 
a = np.array([[[1,2,3], [3,4,5]],[[10,5,12], [13,6,14]]]) 
print a.shape
for k in a:
    for i in k:
        for j in i:
            print j

Ответы [ 3 ]

2 голосов
/ 13 октября 2019
In [53]: a = np.array([[[1,2,3], [3,4,5]],[[10,5,12], [13,6,14]]])              

Простая печать, формат массива str(a):

In [54]: print(a)                                                               
[[[ 1  2  3]
  [ 3  4  5]]

 [[10  5 12]
  [13  6 14]]]

Воссоздание этого с итерацией, на мой взгляд, больше работы, чем стоит.

Хорошо, вот первая попытка сделать это итеративно:

In [66]: block = [] 
    ...: for panel in a: 
    ...:     sub = [] 
    ...:     for row in panel: 
    ...:         sub.append(str(row)) 
    ...:     sub = '\n'.join(sub) 
    ...:     block.append(sub) 
    ...: block = '\n\n'.join(block)                                             
In [67]: block                                                                  
Out[67]: '[1 2 3]\n[3 4 5]\n\n[10  5 12]\n[13  6 14]'
In [68]: print(block)                                                           
[1 2 3]
[3 4 5]

[10  5 12]
[13  6 14]
1 голос
/ 13 октября 2019

Модуль pprint сделан именно для этой цели.

Используется так:

import numpy as np
from pprint import pprint
a = np.array([[[1,2,3], [3,4,5]],[[10,5,12], [13,6,14]]]) 
print a.shape
pprint(a)

Вы получите такой вывод:

(2, 2, 3)
array([[[ 1,  2,  3],
        [ 3,  4,  5]],

       [[10,  5, 12],
        [13,  6, 14]]])
0 голосов
/ 13 октября 2019

Рекурсивно вы можете сделать это так:

import numpy as np

def recursive_array_print(arr):
    if isinstance(arr, (list, tuple, np.ndarray)):
        print("[", end =" ")
        for element in arr:
            if isinstance(element, (list, tuple, np.ndarray)):
                recursive_array_print(element)
            else:
                print(str(element), end =" ")
        print("]", end =" ")

Функции тестирования:

def separator():
    print()
    print("_______________")
def compare_print_and_recursive(arr):
    separator()
    recursive_array_print(arr)
    separator()
    print(arr)
    separator()
#test data
testarr1=np.array([[[1,2,3], [3,4,5]],[[10,[2,3,4],12], [13,6,14]]])
testarr2=[[[1,2,3], [3,4,5]],[[10,[2,3,4],12], [13,6,14]]]
testarr3=(((1,2,3), (3,4,5)),((10,(2,3,4),12), (13,6,14)))
#printing the test data
print("np.array")
compare_print_and_recursive(testarr1)
print("list")
compare_print_and_recursive(testarr2)
print("tuple")
compare_print_and_recursive(testarr3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...