Почему второе измерение в массиве Numpy пусто?

Вы можете использовать функции head() (или first()), чтобы увидеть, имеет ли DataFrame одну строку. Если это так, это не пусто.

1
задан Thomas Lee 14 July 2018 в 00:46
поделиться

1 ответ

Если есть путаница, (3,) не означает, что отсутствует измерение. Запятая является частью стандартной нотации Python для одного элемента кортежа. Формы (1,3), (3,), and (3,1) различны,

Хотя они могут содержать одни и те же 3 элемента, их использование в вычислениях (broadcasting) отличается, их формат печати отличается, а их эквивалент списка отличается:

In [21]: np.array([1,2,3])
Out[21]: array([1, 2, 3])
In [22]: np.array([1,2,3]).tolist()
Out[22]: [1, 2, 3]
In [23]: np.array([1,2,3]).reshape(1,3).tolist()
Out[23]: [[1, 2, 3]]
In [24]: np.array([1,2,3]).reshape(3,1).tolist()
Out[24]: [[1], [2], [3]]

И нам не нужно останавливаться на добавлении только одного размера синглтона:

In [25]: np.array([1,2,3]).reshape(1,3,1).tolist()
Out[25]: [[[1], [2], [3]]]
In [26]: np.array([1,2,3]).reshape(1,3,1,1).tolist()
Out[26]: [[[[1]], [[2]], [[3]]]]

В numpy массив может иметь 0, 1, 2 или больше размеров. 1 так же логичен, как 2.

В MATLAB матрица всегда имеет 2 dim (или больше), но это не обязательно должно быть таким. Строго говоря, MATLAB даже не имеет скаляров. Массив с формой (3) не имеет измерения только в том случае, если в качестве стандарта принимается MATLAB.

numpy построен на Python, который является скалярами и списками (которые могут гнездиться). Сколько размеров имеет список Python?

Если вы хотите попасть в историю, MATLAB был разработан как интерфейс для набора линейных алгоритмов Fortran. Учитывая проблемы, эти подпрограммы решили концепцию матрицы с 2-мя измерениями, а аргументы строк и столбцов имели смысл. Это было не до версии 3.что-то, что MATLAB было обобщено, чтобы допускать более двух измерений (в конце 1990-х годов).

numpy основан на нескольких попытках предоставить массивы Python (например, numeric). Эти разработчики взяли более общий подход к массивам, где 2d было искусственным ограничением. Это имеет приоритет в компьютерных языках и математике (и физике). APL была разработана в 1960-х годах, сначала как математическая нотация, а затем как компьютерный язык. Как и numpy, его arrays может быть 0d или выше. (Поскольку я использовал APL до того, как использовал MATLAB, подход numpy кажется вполне естественным.)


В APL нет отдельных списков или кортежей. Таким образом, форма array, rho A сама является массивом, а rho rho A является числом измерений A, также называемым rank.

http: // docs.dyalog.com/14.0/Dyalog%20APL%20Idioms.pdf

2
ответ дан hpaulj 17 August 2018 в 12:04
поделиться
  • 1
    Я бы сказал, что у Python есть различные контейнеры , и концепция скаляров на самом деле не применяется. А списки не имеют размеров :) – juanpa.arrivillaga 14 July 2018 в 01:27
  • 2
    Этот ответ действительно не является ответом на то, что они говорят, и лучше будет служить комментарием. – David 14 July 2018 в 01:28
  • 3
    @David, я начал писать комментарий, а потом решил, что для этого слишком много времени. Этот вопрос неоднократно хэшировался и, вероятно, должен быть закрыт как дубликат или, может быть, вопрос. – hpaulj 14 July 2018 в 01:31
  • 4
    @ Давид отвечает на вопрос, насколько я могу понять вопрос ОП – juanpa.arrivillaga 14 July 2018 в 01:31
Другие вопросы по тегам:

Похожие вопросы: