Почему класс 'numpy .ndarray' пуст (итерация по массиву 0), если есть контент? - PullRequest
0 голосов
/ 05 апреля 2020

Я проверил вопросы / ответы, данные в следующих ссылках, и не нашел ничего, что могло бы мне помочь: 1) как прочитать массив чисел из текстового файла в python 2) TypeError : итерация по массиву 0-го Python 3) Как индексировать массив 0-го в Python?

Этот пост является ближайшим: Почему python считает мой массив 0-d? (TypeError: итерация по массиву 0) d

Итак, я собираюсь написать свой вопрос здесь, а не открывать новый тег. Я надеюсь, что это хорошо, я новичок здесь, так что извините, если это не так.

Мой случай:

Я сделал функцию randomSampling (для упражнения в классе), как это :

def randomSamples(array):
    print(array)
    print(type(array))
    i = 0

    while i < len(array):
        sampling1 = np.random.choice((array), 5)
        i += 1
        sampling1 = np.concatenate([sampling1])
        print(sampling1)

print(type(sampling1))

Затем я запускаю функцию следующим образом:

test1 = np.random.choice(15, 13)
sampling2 = randomSamples(test1)
sampling3 = np.asarray(sampling2)
print(type(sampling3))
sampling3.shape  # Nothing comes out, something may be wrong.

Вывод:

[ 7  9  6  3 13  7  1  1  9  9  0  6 12]
<class 'numpy.ndarray'>
[6 9 7 9 9]
[12  1  1 13 12]
[ 9  7 13  0  1]
[3 1 9 3 1]
[ 1  1  7  6 13]
[ 6  9  7 12  0]
[ 9 12  3  3  6]
[3 9 6 3 3]
[ 1  9  9  6 13]
[6 1 1 3 3]
[1 9 9 3 1]
[13  9 13  9  9]
[ 7  1  6  0 12]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

Когда я запускаю:

SEM(sampling3)

Я получаю:

<class 'numpy.ndarray'>
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-556-1456ec9b184d> in <module>
----> 1 SEM(sampling3)

<ipython-input-269-90a8bbeb1e1a> in SEM(array)
      4     array1 = []
      5 
----> 6     for i in array:
      7         counter += i
      8         a1 = float(counter/len(array))

TypeError: iteration over a 0-d array

Я не понимаю, почему результат функции, хотя это класс 'numpy .ndarray', и я даже создал другую переменную (sampling3) с помощью np. asarray, чтобы убедиться, что это np.array.

Я заметил, что атрибут shape выходит пустым. В идеале, массив должен быть: name = [[6 9 7 9 9], [12 1 1 13 12], ..., [7 1 6 0 12]], с формой (13,5).

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

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

Давайте рассмотрим действие вашей функции:

Сделайте начальный образец:

In [22]: arr = np.random.choice(15,13)                                                         
In [23]: arr                                                                                   
Out[23]: array([ 1,  3,  0, 14, 13, 13, 10,  9,  5,  0, 12, 12,  2])

Внутри l oop возьмите образец из этого:

In [25]: samp = np.random.choice((arr), 5)                                                     
In [26]: samp                                                                                  
Out[26]: array([14,  5,  5,  3,  3])

1009 * ничего не делает. Что он должен был сделать?

In [27]: samp = np.concatenate([samp])                                                         
In [28]: samp                                                                                  
Out[28]: array([14,  5,  5,  3,  3])

взять другой образец (() arr ничего не делать):

In [29]: samp = np.random.choice(arr, 5)                                                       
In [30]: samp                                                                                  
Out[30]: array([13,  3,  9,  9, 12])
In [31]: samp = np.concatenate([samp])                                                         
In [32]: samp                                                                                  
Out[32]: array([13,  3,  9,  9, 12])

samp из Out[28] был потерян , Если вы хотите сохранить значения в al oop, вам нужно собрать их в структуру, такую ​​как список.

alist = []
for i in range(3):
   alist.append(np.random.choice(arr, 5)

создает список из 3 массивов.

Ваша функция не иметь оператор return, поэтому он возвращает None:

In [33]: np.asarray(None)                                                                      
Out[33]: array(None, dtype=object)
In [34]: _.shape                                                                               
Out[34]: ()

, делая массив из None, получая массив 0d.

In [36]: for i in np.asarray(None): pass                                                       
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-36-8942a42b4c6b> in <module>
----> 1 for i in np.asarray(None): pass

TypeError: iteration over a 0-d array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...