«Это 21-й день моего участия в ноябрьском испытании обновлений. Подробную информацию о мероприятии см.:Вызов последнего обновления 2021 г."
Основное использование Anaconda
Согласно предыдущей статье, я считаю, что все установили Anaconda.Некоторые друзья оставили сообщение в области сообщений и надеялись опубликовать учебник по использованию Anaconda.На самом деле основное использование Anaconda очень простое, и в основном нет учебник требуется.
После установки Anaconda под Windows во всех программах под Anaconda можно увидеть следующие компоненты:
-
Anaconda Navigator: графический интерфейс для управления наборами инструментов и средами.
-
Anaconda Prompt: интерфейс командной строки для управления пакетами и средами.
-
Jupyter Notebook: интерактивная вычислительная среда на базе Интернета, которая демонстрирует процесс анализа данных и создает удобную для чтения документацию.
-
Spyder: Python IDE с макетом, похожим на Matlab.
В основном мы используем третий Jupyter Notebook для обучения.
Вот простая популяризация часто используемых команд Anaconda (хотя я ими не часто пользуюсь).
- Посмотреть номер версии программного обеспечения
python --version #查看Python版本
conda --version #查看conda的版
- добавить зеркало
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- обновить конду
conda upgrade --all
- Просмотр установленных пакетов
conda list
conda install [package name] #安装package,安装在默认的Python环境中
Рекомендуется устанавливать Anaconda только для начинающих, что может избавить от многих ненужных проблем.Выше приведено основное использование Anaconda.Вы можете добавить его в области сообщений.
Индексация и нарезка Numpy
Исправьте ошибку следующей статьи:
# 正确的导入方式
import numpy as np
Метод индексации numpy аналогичен индексации списка в Python, Здесь мы в основном вводим индексацию/нарезку обычных массивов и логических массивов.
Индексация/нарезка одномерных массивов
Индекс и срез одномерного массива такие же, как список в Python, индекс начинается с 0, а срез закрыт слева и открыт справа.
import numpy as np
ar = np.arange(20)
# 输出ar的第4个值
print(ar[3])
# 输出ar的前四个值
print(ar[:4])
>>>
4
[0 1 2 3]
Индексация/нарезка многомерных массивов
Двумерный массив можно понимать как два одномерных массива, сложенных горизонтально, поэтому достаточно взять соответствующий индекс соответственно.
import numpy as np
ar = np.arange(16).reshape(4,4)
# 二维数组索引遵照先行后列(有以下两种写法)
# 选取第二行第二列的值
print(ar[2][2])
print(ar[2,2])
# 二维数组切片
# 取出前两行的值
print(ar[:2])
# 取出前两行后两列的值
print(ar[:2,2:])
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
10
10
[[0 1 2 3]
[4 5 6 7]]
[[2 3]
[6 7]]
Методы индексации и нарезки трехмерных массивов эквивалентны эволюционной версии двумерных массивов.
import numpy as np
ar = np.arange(12).reshape(3,2,2)
print(ar)
# 三维数组索引遵照先维度后行再列
print(ar[2][0][1])
print(ar[2,0,1])
# 切片
# 获取第一个数组的第一行的第一列的数
print(ar[:1,:1,:1])
>>>
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
[[[0]]]
9
9
Логическое индексирование и нарезка
Использование логических массивов находится в центре внимания этой статьи.
# 简单展示一下布尔型的一维数组长啥样
i = np.array([True,False,True])
j = np.array([True,True,False,False])
print(i)
print(j)
>>>
[ True False True]
[ True True False False]
И то, что мы часто видим, это:
ar = np.arange(12).reshape(3,4)
print(ar)
print(ar>5)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[False False False False]
[False False True True]
[ True True True True]]
Когда нам нужно отфильтровать значения больше 3 в ar, мы можем использовать логические значения для фильтрации следующим образом:
ar = np.arange(12).reshape(3,4)
print(ar[ar>3])
>>>
[ 4 5 6 7 8 9 10 11]
Numpy случайные числа
Равномерное и нормальное распределение
Генерация случайных чисел с равномерным и нормальным распределением
# numpy.random.rand() 生成一个0-1的随机浮点数或N维浮点数 --均匀分布
a = np.random.rand()
b = np.random.rand(4,4)
print(a)
print(b)
>>>
0.5544023939180306
[[0.46387648 0.97345876 0.12059175 0.7565951 ]
[0.30192996 0.76633208 0.20107761 0.09315875]
[0.79347118 0.26714404 0.08628158 0.72510313]
[0.06606087 0.93260038 0.90268201 0.90941348]]
Генерация случайных чисел с нормальным распределением
# numpy.random.randn() 生成一个0-1的随机浮点数或N维浮点数 --正态分布
a = np.random.randn()
b = np.random.randn(4,4)
print(a)
print(b)
>>>
0.26901442604096687
[[ 0.40261375 -0.23541184 0.96607489 -1.11253043]
[-0.31670703 0.05841136 -0.01862511 1.72597729]
[ 0.17052799 1.03537825 -0.94375417 1.32484928]
[ 0.132761 0.44950533 0.44131534 -0.11319535]]
Согласно приведенному выше методу написания, я считаю, что все понимают .randn() и .rand() недостаточно ясно, Вот наглядный способ показать это:
#平均分布
# numpy.random.rand() 生成一个0-1的随机浮点数或N维浮点数 --均匀分布
data1 = np.random.rand(500)
data2 = np.random.rand(500)
#正态分布
# numpy.random.randn() 生成一个浮点数或N维浮点数 --正态分布
data3 = np.random.randn(500)
data4 = np.random.randn(500)
import matplotlib.pyplot as plt
% matplotlib inline
plt.scatter(data1,data2)
plt.scatter(data3,data4)
Вот схема случайного распределения:
Вот график нормального распределения:
Видно, что отображение нормального распределения и случайного распределения сильно различается.Конечно, это только для того, чтобы углубить ваше понимание .randn() и .rand(), а больше вы узнаете после визуализации.
Другое использование случайных чисел Numpy
#随机整数
print(np.random.randint(2))
#在2-10之间生成随机整数
print((np.random.randint(2,10)))
# 在0-10之间生成10个整数
print((np.random.randint(10,size=10)))
# 在0-10之间生成包含10个元素的二维数组
print(np.random.randint(10,size=(2,5)))
# 在10-50之间生成包含10个元素的二维数组
print(np.random.randint(10,50,size=(2,5)))
Закрепляющие упражнения
-
Создайте 2 нормально распределенных массива 1D с 10 элементами
-
Пожалуйста, создайте массив ar по мере необходимости, а затем измените значение ar[:2,:2] на случайное число [0,1)
- Создайте массив по мере необходимости и по индексу, какие у него ar[4], ar[:2,3:], ar[3][2]
- Создайте массив по мере необходимости, отфильтруйте значения со значением элемента больше 5 и сгенерируйте новый массив