Я проверил вопросы/ответы, приведенные в следующих ссылках, и не нашел ничего, что могло бы мне помочь: 1) как читать массив чисел из текста файл на питоне 2) TypeError: итерация по массиву 0-d Python 3) Как индексировать массив 0-d в 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.
Я замечаю, что атрибут формы выходит пустым. В идеале массив должен быть: name = [[6 9 7 9 9],[12 1 1 13 12],...,[7 1 6 0 12]], с формой (13,5).
Любая помощь будет оценена. Заранее спасибо.
1 ответ
Давайте рассмотрим действие вашей функции:
Сделайте первоначальный образец:
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])
Внутри цикла сделайте выборку из этого:
In [25]: samp = np.random.choice((arr), 5)
In [26]: samp
Out[26]: array([14, 5, 5, 3, 3])
concatenate
ничего не делает. Что он должен был делать?
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]
потерян. Если вы хотите сохранить значения в цикле, вам нужно собрать их в структуру, например в список.
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
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
sampling3.shape # Nothing comes out, something may be wrong.
- что не так в этой конкретной строке, так это то, что вы забылиprint
.return
забыли, и вы выбрасываете результаты предыдущей итерации на каждой новой итерации.