Numpy(上)

Posted bc10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy(上)相关的知识,希望对你有一定的参考价值。

简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作。Numpy 的核心是 ndarray 对象,这个对象封装了同质数据类型的n维数组。起名 ndarray 的原因就是因为是 n-dimension-array 的简写。ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

一、构建ndarray:从Python列表创建数组

import  numpy as np

np.array()

    np.array(object, dtype=None)

object:转换的数据

dtype : 数据类型

二、数据类型

Numpy 中的数组比 Python 原生中的数组(只支持整数类型与浮点类型)强大的一点就是它支持更多的数据类型。

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

请记住,不同于 Python 列表,NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换(如果可行)。

让我们来领会一下什么叫做向上转换:整数-小数-字符串……

三、Numpy 的矢量化(向量化)功能

a = [[1, 2, 3], [5, 7, 8], [4, 5, 6]]
b = [[6, 2, 1], [2, 3, 1], [4, 5, 6]]

# 转换nparray
a1 = np.array(a)
b1=  np.array(b)

a1 + b1
a1*b1
a1 / b1
a1 + 5
a1 * 3
a1 ** 2

for循环是“遍历”,python数据类型是不一样的,但是在Numpy中数据是一样的,矢量化是“一次性”,这就是数组运算的意思。

矢量化代码有很多优点,其中包括:

  • 矢量化代码更简洁易读
  • 更少的代码行通常意味着更少的错误
  • 该代码更接近地类似于标准数学符号(使得更容易,通常,以正确地编码数学构造)
  • 矢量化导致更多的“Pythonic”代码。如果没有向量化,我们的代码将会效率很低,难以读取for循环。

四、创建常用的数组

单位矩阵,全零矩阵,三角矩阵等常用的矩阵数组,在线性代数的辅助计算中有很多特殊的作用。下面我们来看一下如何创建这些矩阵数组:

1.全0数组

np.zeros((3, 5))

2.全1数组

np.ones([4,3])

3.单位矩阵

np.eye(3, dtype=int)

4.空矩阵

np.empty(10)
#空矩阵里面的值是没有意义的

5.对角矩阵

np.diag([1, 5, 300, 444, 44, 666, 77])

6.设定具体的值

np.full((3, 5),3.14 )

7.设置空值

f=np.nan 

8.设置无穷大

np.inf

9.随机数组

np.random.randint(1, 10, (3, 6)) #随机整数数组

np.random.rand(3,3)#生成0-1之间的随机数组

  

10.正态分布

#标准正态分布
np.random.randn(4, 5 ) 

 # 均值, 标准差, 形状
np.random.normal(4, 2, (10, 3)) 
# 生成t分布, df 自由度  
np.random.standard_t(10 , (3,3))

# 卡方分布
np.random.chisquare(10 , (3,4))


# F分布 , 分子自由度, 分母自由度
np.random.f(2,3, (3,4))

11.随机数种子

# 随机数种子
np.random.seed(666)
np.random.randint(0,10, (3,3))

12.创建一个线性序列的数组

arange([start,] stop[, step,])

特点: 可以设置开始位置,终止位置和步长,但产生数字的数量不方便控制

np.arange(0, 20, 4)



np.linspace(开始位置, 终止位置, 产生数量)

特点: 可以设置开始位置和终止位置以及产生数量,但不方便控制步长

# 从 0 - 10  个数 28个
np.linspace(0 , 10 , 28)

 range是左闭右开,linspace闭区间。

 

 

 

 

以上是关于Numpy(上)的主要内容,如果未能解决你的问题,请参考以下文章

'numpy.ndarray':对象不可调用错误

如何创建片段以重复变量编号中的代码行

对数据进行去均值并转换为 numpy 数组

替换或删除后台堆栈上现有片段的代码不起作用

为啥代码片段在 matplotlib 2.0.2 上运行良好,但在 matplotlib 2.1.0 上引发错误

为什么numpy随机shuffle不能在numpy数组上工作?