2013-03-11 3 views
1

У меня есть NumPyarray, который имеет размер (3, 3). Когда я печатаю форму array в пределах __main__, я получаю (3, 3). Однако я передаю этот массив функции, и когда я печатаю его размер в функции, я получаю (3,).Вопрос о размере массива NumPy

Почему это происходит?

Кроме того, что означает, что для кортежа иметь свой последний элемент неуказанным? То есть, не должно быть (3,) недействительным кортежем в первую очередь?

+1

(3,) означает туль с одним элементом. 'x = (3,)' дает вам кортеж, 'x = (3)' не даст вам кортеж – zzk

ответ

2

Чтобы ответить на ваш второй вопрос:

кортежей в Python являются п-мерным. То есть вы можете иметь кортеж 1-2-3-...-n. Из-за синтаксиса способ, которым вы представляете кортеж 1-dimensional, - ('element',), где конечная запятая является обязательной. Если у вас есть ('element'), то это просто выражение внутри скобки. So (3) + 4 == 7, но (3,) + 4 == TypeError. Точно так же ('element') == 'element'.

Чтобы ответить на ваш первый вопрос:

Вы более чем вероятно, делать что-то неправильно с прохождением массива вокруг. Нет никаких оснований для того, чтобы массив NumPy исказил себя без какой-либо мутации в массив.

2

Кортеж такой как: (3,) означает, что это кортеж с одним элементом (в данном случае один размер). Это правильный синтаксис - с конечным ,, потому что если бы он выглядел так: (3), тогда Python интерпретировал бы его как число, окруженное скобками, а не кортежем.

Было бы полезно увидеть фактический код, но я предполагаю, что вы не передаете весь массив, а только строку (или столбец).

2

Трудно сказать, почему вызов функции изменил бы массив numpy без просмотра кода.

По второму вопросу, это стандартная нотация для одноэлементного кортежа - то, что делает его кортежем, вместо запятой - это запятая. Рассмотрим (3+3) * 2 - если скобки сделали кортеж, тогда это целое выражение будет недействительным, так как вы не можете умножить кортеж на int. В более общем смысле, Python позволяет отставая запятые повсюду:

>>> (3,3,) == (3,3) 
True 

Это также работает для списков, словарей и вызовов функций - в основном, везде, где Python ожидает, разделенных запятыми элементов, замыкающая запятая является действительным.

Смежные вопросы