numpy 笔记(1)

时间:2019-02-14
本文章向大家介绍numpy 笔记(1),主要包括numpy 笔记(1)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

numpy基础 笔记

数组的形状

ndarray 的随机创建

# 导入numpy,别名是np
import numpy as np
# 导入matplotlib,别名plt
import matplotlib.pyplot as plt

# random表示常见随机数,rand表示创建一个随机的浮点数数组,参数的个数表示数组维度的大小
# 默认区间是 0.0 ~ 1.0 之间
arr = np.random.rand(3, 4)
print(arr)
print(type(arr))
# ndim 参数表示数组的维度
print(arr.ndim)

# shape 参数表示数据的大小
print(arr.shape)

# reshape 参数表示重塑数据的行列数
# print(arr.reshape(2,6))

# dtype表示每个数据的类型
print(arr.dtype)

输出

[[ 0.22107398 0.71484805 0.8985325 0.1871831 ]
[ 0.40095961 0.18651406 0.85371751 0.38446084]
[ 0.37992371 0.62813441 0.05276292 0.21327295]]
<class ‘numpy.ndarray’>
2
(3, 4)
float64

广播原则

如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或者其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和长度为1的维度上进行。
如果是二维的,有一个维度一样便可以计算

shape为(3,3,3)的数组能不够和(3,2)的数组进行计算
shape为(3,3,2)的数组可以和 (3,2)的数组进行计算
可以和在某一个方向shape相同的数组计算

import numpy as np

# 建立一个三维数组
t1 = np.arange(100,124).reshape((2,3,4))
print(t1)

# 将t1换成二维,一维,但是不改变t1的形状
print(t1.reshape(4,6))
print(t1.reshape(24,))

# 下面是二维数据
# print(t1.reshape(1,24))
# print(t1.reshape(24,1))

# 快速换一维
t1.flatten()

# 随机打乱原数组的序列
np.random.shuffle(arr)

# 所有值加2,乘除加减,除以0也会有结果(nan(0/0),inf(无穷大))
print(t1+2)

# t2可以是(2,3),(2,4),(3,4)和一维
t2 = np.arange(8).reshape(2,4)
print(t1-t2)

numpy创建数组

ndarray的序列创建

# lis 是range类型,包含了 0 ~ 10 的数据的迭代器
lis = range(10)
#把  lis 做为np.array()的参数,则会创建一个包含 0 ~10 的10个元素的一维数组
arr = np.array(lis,dtype='i1')
print(arr)

[0 1 2 3 4 5 6 7 8 9]

# array() 参数可以是多维的数组
# 下面示例:表示创建了一个三维数组,数组里包含了两个二维数组,
# 每个二维数组包含了两个一维数组,
# 每个一维数组里包含了10个元素
arr2 = np.array([[lis, lis],[lis, lis]])
print(arr2)

[[[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]]
,
[[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]]]

# 创建一个3行4列的二维数组,默认呢数组的每个元素都是float64类型的 0
# 第二个参数可以指定数据类型
arr3 = np.zeros((3, 4), int)
print(arr3)
print(arr3.dtype)

[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
int32

# 创建一个3行4列的二维数组,默认数组的每个元素都是float64类型的 1
# 第二个参数可以指定数据类型
arr4= np.ones((3, 4), int)
print(arr4)

[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]

# 初始化数组,不指定具体数值,里面的值有可能是0,有可能不是0,默认数组的每个元素都是float64类型的 
# 第二个参数可以指定数据类型
arr5 = np.empty((3, 4), int)
print(arr5)

[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]

数组的数据类型转换

zeros_float = np.zeros((3, 4))
print(zeros_float)

[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]

zeros_int = zeros_float.astype(np.int32)
print(zeros_int)

[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]

t1 = np.array([random.random() for i in range(10)])
print(t1)

# 保留两位小数
t2 = np.round(t1, 2)
print(t2)

[0.14195446 0.66925828 0.45425019 0.08682404 0.23824718 0.89987356
0.43585148 0.88922967 0.99458272 0.0559437 ]
[0.14 0.67 0.45 0.09 0.24 0.9 0.44 0.89 0.99 0.06]