欢迎关注公众号【Python开发实战】, 获取更多内容!

工具-numpy

numpy是使用Python进行数据科学的基础库。numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。

创建数组

导入numpy

import numpy as np

np.zeros

zeros函数创建一个包含任意数量0的数组

np.zeros(5)

输出:

array([0., 0., 0., 0., 0.])

通过提供所需行数和列数的元组,创建2维数组同样容易

np.zeros((3, 4))

输出:

array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])

在numpy中,每个维度被称为轴。

轴的数量称为秩。

例如,上面3×4的矩阵是秩为2的数组(它是二维的)。

第一个轴的长度为3,第二个轴的长度为4.

轴长度的数组称为数组的形状。

例如,上面矩阵的形状是(3, 4)

秩等于形状的长度。

数组的大小是元素的总数,它是所有轴长度的乘积。

a = np.zeros((3, 4))
a.ndim

输出:

2
a.shape

输出:

(3, 4)
a.size

输出:

12

N维数组

也可以创建一个任意秩的N维数组。例如,创建一个三维数组,秩为3, 形状(2, 3, 4)

np.zeros((2, 3, 4))

输出:

array([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]], [[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])

数组类型

numpy数组的类型为ndarray

type(np.zeros((3, 4)))

输出:

numpy.ndarray

np.ones

有许多其他numpy函数创建数组,例如,创建一个全为1的3×4矩阵

np.ones((3, 4))

输出:

array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])

np.full

创建一个用给定值初始化的给定形状的数组,例如,创建一个3×4的值全为π的矩阵

np.full((3, 4), np.pi)

输出:

array([[3.14159265, 3.14159265, 3.14159265, 3.14159265],
[3.14159265, 3.14159265, 3.14159265, 3.14159265],
[3.14159265, 3.14159265, 3.14159265, 3.14159265]])

np.empty

一个未初始化的2×3矩阵,它的内容是不可预测的,因为它在创建时可以是内存中的任何内容

np.empty((2, 3))

输出:

array([[2.67e-322, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000]])

np.array

调用np.array函数,可以使用一个常规的Python数组来初始化一个ndarray

np.array([[1, 2, 3, 4], [10, 20, 30, 40]])

输出:

array([[ 1,  2,  3,  4],
[10, 20, 30, 40]])

np.arange

也可以使用np.arange函数来创建ndarray,它和Python的内置函数range很相似

np.arange(5)

输出:

array([0, 1, 2, 3, 4])

它也可以适用于浮点数

np.arange(1.0, 5.0)

输出:

array([1., 2., 3., 4.])

也可以提供一个步长

np.arange(1, 5, 0.5)

输出:

array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

然而,在处理浮点数时,数组中元素的确切数量不总是可预测的,例如

print(np.arange(0, 5/3, 1/3))
print(np.arange(0, 5/3, 0.333333333))
print(np.arange(0, 5/3, 0.333333334))
[0.         0.33333333 0.66666667 1.         1.33333333 1.66666667]
[0. 0.33333333 0.66666667 1. 1.33333333 1.66666667]
[0. 0.33333333 0.66666667 1. 1.33333334]

np.linspace

因此,在处理浮点数时,通常使用np.linspace函数代替np.arange更为合适。

np.linspace函数返回一个数组,数组包含在两个值之间均匀分布的确定数量的点,注意最大值是包含的,和arange相反

np.linspace(0, 5/3, 6)

输出:

array([0.        , 0.33333333, 0.66666667, 1.        , 1.33333333,
1.66666667])

np.random.rand和np.random.randn

在numpy的random模块中,有许多函数可以用来创建随机值初始化的ndarray。例如,用0和1之间的随机浮点数(均匀分布),初始化一个3×4的矩阵

np.random.rand(3, 4)

输出:

array([[0.30586708, 0.34763449, 0.519684  , 0.04926177],
[0.29417614, 0.97678489, 0.9705164 , 0.98024753],
[0.47643478, 0.60871336, 0.75896665, 0.65856085]])

下面是一个3×4的矩阵,包含从均值为0、方差为1的单变量正态分布(高斯分布)中采样的随机浮点数

np.random.randn(3, 4)

输出:

array([[-1.05615896,  0.78109315, -0.48346535,  0.12796358],
[ 2.14751189, -0.52941474, 0.51978758, -0.24381611],
[ 0.78067641, -1.63344577, 0.26140033, 1.2056936 ]])

下面给出了均匀分布和正态分布的图像

%matplotlib inline
import matplotlib.pyplot as plt
plt.hist(np.random.rand(100000), density=True, bins=100, histtype="step", color="blue", label="rand")
plt.hist(np.random.randn(100000), density=True, bins=100, histtype="step", color='red', label="randn")
plt.axis([-2.5, 2.5, 0, 1.1])
plt.legend(loc="upper left")
plt.title('random distributions')
plt.xlabel('value')
plt.ylabel('density')
plt.show()

np.fromfunction

也可以使用一个函数来初始化一个ndarray

def my_func(z, y, x):
return x+10*y+100*z
np.fromfunction(my_func, (3, 2, 2))

输出:

array([[[  0.,   1.],
[ 10., 11.]], [[100., 101.],
[110., 111.]], [[200., 201.],
[210., 211.]]])

numpy首先创建3个ndarray, 每个维度一个,每个的形状为(3, 2, 2)。

每个ndarray的值等于沿特定轴的坐标,例如 z 数组中的所有元素都等于其 z 坐标

所以函数中的表达式,实际上是对数组的运算,且函数只被调用一次

def func2(x, y):
return x+2*y
np.fromfunction(func2, (2, 2))

输出:

array([[0., 2.],
[1., 3.]])
def func3(x):
return x
np.fromfunction(func3, (2, ))

输出:

array([0., 1.])

最新文章

  1. redis入门笔记(2)
  2. socket关联查询
  3. 条件随机场理论分析CRF(Conditional Random Field)
  4. C++ 栈的基本操作
  5. Windows计算机功能Java源码
  6. [转]Speeding Up Websites With YSlow
  7. Http(1)
  8. Shader Forge 武器流光
  9. C++中引用用于结构
  10. Android编程心得-设计一个可重用的自定义Dialog
  11. JavaWeb-11 (JSP&EL表达)
  12. 每天一个linux命令(54)--watch命令
  13. UWP 图片缩放
  14. Unity插件 - MeshEditor(三) 面片破碎&网格破碎
  15. UOJ#348 州区划分
  16. 我的web前端整理和学习
  17. CUDA compiler driver nvcc 散点 part 1
  18. Java中队列
  19. RedHat7.4最小化安装没有ifconfig命令
  20. python数据类型,格式话输出

热门文章

  1. 问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
  2. 2022:checking for Python executable "python2" in the PATH
  3. 最小生成树MST算法(Prim、Kruskal)
  4. margin 塌陷bug 触发bfc
  5. JavaWeb 11_jsp九大内置对象
  6. 基于EMR离线数据分析-反馈有礼
  7. logging 日志配用
  8. 利用DNSLog实现无回显注入
  9. CF1479X Codeforces Round #700
  10. Vue指令02——v-on指令和v-show的使用