Преобразован ли набор в массив numpy? - PullRequest
1 голос
/ 23 апреля 2020

Я создаю ndarray, используя:

import numpy as np

arr=np.array({1,2})
print(arr, type(arr))

, который выводит

{1, 2} <class 'numpy.ndarray'>

Если его тип равен numpy .ndarray, то o / p должно быть в квадратных скобках, например [1,2]? Спасибо

Ответы [ 4 ]

0 голосов
/ 23 апреля 2020

Отображение repr ipython может сделать это более понятным:

In [162]: arr=np.array({1,2})                                                                          
In [163]: arr                                                                                          
Out[163]: array({1, 2}, dtype=object)

arr - это массив 0d, объект dtype, содержит 1 элемент, набор.

Но если мы сначала превратим набор в список:

In [164]: arr=np.array(list({1,2}))                                                                    
In [165]: arr                                                                                          
Out[165]: array([1, 2])

, теперь у нас есть 1d (2,) целочисленный массив dtype.

np.array(...) преобразует список (и список как) аргументы в многомерный массив. A set недостаточно list-like.

0 голосов
/ 23 апреля 2020

Возвращает объект массива numpy без измерений. Набор - это объект. Это похоже на передачу numpy.array числа (без скобок). Смотрите разницу здесь:

arr=np.array([1]) 
arr.shape: (1,)


arr=np.array(1) 
arr.shape: ()

arr=np.array({1,2}) 
arr.shape: ()

Поэтому он обрабатывает весь ваш набор как один объект и создает массив numpy без измерений, который возвращает только заданный объект. Наборы не array-like и не имеют порядка, следовательно, согласно numpy массиву до c они не преобразуются в массивы, как вы ожидаете. Если вы хотите sh создать массив numpy из набора и вас не заботит его порядок, используйте:

arr=np.fromiter({1,2},int)
arr.shape: (2,)
0 голосов
/ 23 апреля 2020

Это делает что-то немного другое, чем вы можете себе представить. Вместо того, чтобы создавать массив с указанными вами данными, номерами 1 и 2, вы фактически создаете массив типа object. См. Ниже:

>>> np.array({1, 2)).dtype
dtype('O')

Это потому, что наборы не являются "подобными массиву", в терминологии NumPy, в частности, они не упорядочены. Таким образом, при построении массива массив строится не с содержимым набора, а с самим набором как одним объектом.

Если вы действительно хотите построить массив из содержимого набора Вы можете сделать следующее:

>>> x = np.fromiter(iter({1, 2}), dtype=int)
>>> x.dtype
dtype('int64')

Редактировать: Этот ответ помогает объяснить, как различные типы используются для построения массива в NumPy.

0 голосов
/ 23 апреля 2020

Да, но это потому, что вы включаете функцию np.array набор, а не список, если вы попробуете это:

import numpy as np

arr=np.array([1,2]) 
print(arr, type(arr))

вы получите:

[1 2] <class 'numpy.ndarray'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...