каждый элемент в python представляет собой матрицу 1×1, как мне сделать так, чтобы каждый элемент не был отдельным?

#python #numpy #machine-learning

Вопрос:

печать(s0[3][0][0]) дает мне 1

но печать(s0[3][0]) дает мне [1]

как мне сделать так, чтобы печать(s0[3][0]) давала мне 1?

S0-это числовая матрица из 100 строк

 S0 = 
[[[ 1.        ]
  [-0.91903376]
  [ 0.18724527]]

 [[ 1.        ]
  [ 0.87834638]
  [-0.88794145]]

 [[ 1.        ]
  [-0.75320818]
  [ 0.59000726]]]
 

небольшая выборка ^

Комментарии:

1. У вас есть 3-мерная матрица, вы хотите 2-мерную? Снимите внутренние скобки и вставьте запятые между числами, т. е. S0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] .

2. s0[3,0,0] выбирает элемент из 3d-массива. Похоже, у вас есть массив в форме (3,3,1). Вы читали об shape этом и reshape ?

Ответ №1:

Потратьте некоторое время, чтобы ознакомиться numpy с основами. Ключ вот shape в чем . У вас есть 3d массив:

 In [122]: arr = np.arange(9).reshape(3,3,1)
In [123]: arr
Out[123]: 
array([[[0],
        [1],
        [2]],

       [[3],
        [4],
        [5]],

       [[6],
        [7],
        [8]]])
In [124]: arr.shape
Out[124]: (3, 3, 1)
 

Вы можете индексировать такой массив с помощью

 In [125]: arr[:,:,0]
Out[125]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [126]: _.shape
Out[126]: (3, 3)
 

arr[0][0][0] работает, но arr[0,0,0] понятнее.

Вы также можете получить 2d-массив из этого с reshape помощью (обратите внимание, что я использовал reshape для создания исходного массива из массива 1d arange .

 In [127]: arr.reshape(3,3)
Out[127]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
 

Отображение (и ввод) со всеми [] и запятыми хорошо подходит для просмотра массивов, но чем скорее вы познакомитесь с shape reshape ) вашим numpy кодированием, тем проще будет.

Комментарии:

1. спасибо вам за совет! я изучу основы

Ответ №2:

Как упоминалось выше, массив S0 представляет собой трехмерный массив. Чтобы получить одно значение из этого трехмерного массива, вам нужно иметь три индекса. Чтобы получить значение с использованием двух индексов (S0[i][j]), вы должны преобразовать его в 2-d массив.

напр.-

 S1 =[[1.0, -0.91903376, 0.18724527],
[1.0, 0.87834638, -0.88794145],
[1.0, -0.75320818, 0.59000726]]
 

S1[0][0] теперь даст 1.0