2016-11-17 6 views
-1

Я пытаюсь получить доступ к каждому элементу в двумерном массиве numpy.Цитирование через каждый элемент в массиве numpy?

Я привык к чему-то вроде этого в Python [[...], [...], [...]]

for row in data: 
    for col in data: 
     print(data[row][col]) 

но теперь у меня есть data_array = np.array(features)

Как я могу проходить через нее так же?

+0

Нам нужно гораздо больше деталей для того, чтобы помочь. –

+1

Разве это не относится к основной документации на число? – hpaulj

+0

Вы можете проходить через него таким же образом, итерации через него таким же образом. Попробуй и посмотри! Однако итерация через 2D-массив полностью поражает точку использования numpy, то есть эффективные операции с массивом. Например, прочитайте [эту страницу документа] (https://docs.scipy.org/doc/numpy-1.10.1/user/whatisnumpy.html). – Praveen

ответ

2

Сделайте небольшой 2d массив, и вложенный список из него:

In [241]: A=np.arange(6).reshape(2,3) 
In [242]: alist= A.tolist() 
In [243]: alist 
Out[243]: [[0, 1, 2], [3, 4, 5]] 

Один из способов итерации на список:

In [244]: for row in alist: 
    ...:  for item in row: 
    ...:   print(item) 
    ...:   
0 
1 
2 
3 
4 
5 

работает так же для массива

In [245]: for row in A: 
    ...:  for item in row: 
    ...:   print(item) 
    ...:   
0 
1 
2 
3 
4 
5 

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

с массивом можно легко лечить это был 1d

In [246]: [i for i in A.flat] 
Out[246]: [0, 1, 2, 3, 4, 5] 

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

In [247]: [A[i,j] for i in range(A.shape[0]) for j in range(A.shape[1])] 
Out[247]: [0, 1, 2, 3, 4, 5] 

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

-1

Если вы хотите получить доступ к элементу в двумерных массивах numpy, вы можете использовать функции [row_index, column_index]. Если вы хотите, чтобы перебирать в Numpy массива, можно просто изменить сценарий для

for row in data: 

    for col in data: 

     print(data[row, col]) 
+1

Нет. Если вы так повторяете, 'row' является 1-м массивом. Вы можете использовать это как индекс для 'data'. И вторая итерация такая же. У вас, вероятно, есть 'для элемента в строке:' в виду. – hpaulj

+0

Что вам нужно: 'для строки в data.shape [0]' и 'для col в data.shape [1]' или, альтернативно, 'для строки в данных: для col in row: print (col)'. – Praveen

+0

Да, вы правы, я забыл изменить цикл for, чтобы использовать количество строк и столбцов, таких как Praveen. – shrubber

1

Попробуйте np.ndenumerate:

>>> a =numpy.array([[1,2],[3,4]]) 
>>> for (i,j), value in np.ndenumerate(a): 
... print(i, j, value) 
... 
0 0 1 
0 1 2 
1 0 3 
1 1 4 
Смежные вопросы