Как вручную создать массив NumPy три на три на три, используя комбинацию np.array () и np.arange (3)? - PullRequest
1 голос
/ 26 октября 2019

Мне не хватает подхода к следующему массиву NumPy. Цель состоит в том, чтобы вручную создать массив три на три. Я зашел так далеко:

m = np.array([[np.arange(3)], [np.arange(3)], [np.arange(3)]])
m
​
# Output:
array([[[0, 1, 2]],
​
       [[0, 1, 2]],
​
       [[0, 1, 2]]])

m.shape
# Output:
(3, 1, 3)

Вопрос: Как нужно адаптировать m, чтобы m.shape стало (3, 3, 3)?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Я бы подумал, что squeeze () будет проще

> m = np.array([[np.arange(3)], [np.arange(3)], [np.arange(3)]])
> m
> 
> array([[[0, 1, 2]],
> 
>        [[0, 1, 2]],
> 
>        [[0, 1, 2]]])
> 
> m.shape 
> (3, 1, 3)
> 
> s = m.squeeze()
> s 
> array([[0, 1, 2],
>        [0, 1, 2],
>        [0, 1, 2]])
> s.shape
> (3, 3)
0 голосов
/ 26 октября 2019

Подсписки должны содержать три arange(3) с:

# shape (3,3,3)
m = np.array([[np.arange(3), np.arange(3), np.arange(3)],
              [np.arange(3), np.arange(3), np.arange(3)],
              [np.arange(3), np.arange(3), np.arange(3)]])

Это массив три на три. Если вам нужен массив размером три на три, вам нужно только построить один список с тремя arange(3) с:

# shape (3,3)
m = np.array([np.arange(3), np.arange(3), np.arange(3)])

Но может быть проще использовать такую ​​функцию, какnp.tile(..) [numpy-doc] для этого:

# shape (3,3,3)
np.<b>tile(</b>np.arange(3), <b>(3,3,1))</b>

или для массива три на три:

# shape (3,3)
np.<b>tile(</b>np.arange(3), <b>(3,1))</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...