numpy

Numpy(numerical python的简称),是python数值计算的最重要的基础包。大多数提供科学计算的包都是用numpy的数组作为构建的基础。

numpy的部分功能如下:

(1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。

(2)用于对数组数据进行快速运算的标准数学函数(无需编写循环)

(3)用于读写磁盘数据的工具,以及用于操作内存映射文件的工具。

(4)线性代数、随机数生成以及傅里叶变换功能。

(5)用于集成c,c++,fortran等语言编写的代码的API

numpy本身并没有提供多么高级的数据分析功能,理解numpy数组以及面向数组的计算将有助于更加高效地使用诸如pandas之类的工具。

对于大部分数据分析工具而言,主要功能集中在:

(1)用于数据整理和清理,子集构造和过滤,转换等快速地矢量化数组运算。

(2)常用的数组算法,如排序,唯一化,集合运算等

(3)高效的描述统计和数据聚合/摘要运算

(4)用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。

(5)将条件逻辑表述为数组表达式(而不是带有if-elif-else分子的循环)

(6)数据的分组运算(聚合、转换、函数应用等)

numpy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。

 

基于numpy的算法要比纯python快10到100倍(甚至更快),并且使用的内存更小。

import numpy as np
my_arr=np.arange(1000000)
my_list=list(range(1000000))
%time for _ in range(10): my_arr2 = my_arr * 2
%time my_arr3=my_arr*3
print(my_arr2)
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
#以上方式用于对numpy计算数组的时间,和python通过list计算数组乘法的时间,for _ in range(10)循环10遍将时间放大观察。


  ------------------------------------------------------------------------------------------------

1.1    numpy的ndarray:一种多维数组对象

numpy最重要的一个特点是其N维数组对象(ndarray),该对象是一个快速而灵活的大数据集容器,可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

import numpy as np
data=np.random.randn(2,3)
print(data)
#Generate some random data
print('data*10: \n',data*10)
#Generate some random data

print('data+data:\n',data+data)
print(data.shape)
print(data.dtype)

  ndarray所有元素必须是相同类型的,每个数组都有一个shape(一个表示各个维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)

    1.1.1  创建ndarray

import numpy as np
data1=[6,7.5,8,0,1]
arr1=np.array(data1)
print(arr1)
print(arr1.dtype)
data2=[[1,2,3,4],[5,6,7,8]]
arr2=np.array(data2)
print(arr2)
print(arr2.ndim)
print(arr2.shape)
print(arr2.dtype)

  创建ndarray的方式有(1)通过随机数生成指定的维度数组(2)通过首先设置对应的列表,在利用numpy的array()将列表转化为ndarray,嵌套的列表则生成ndarray。

潜逃生成的多维数组,的属性shape依旧是维数,ndim的属性如上所示。会根据合适的数据类型返回到dtype属性中。

除np.array()之外,还有一些函数也可以新建数组,比如zeros(),ones()分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体指的数组,要用这些方法创建多维数组,只需传入一个表示形状的元组即可。

import numpy as np
print(np.zeros(10))
print(np.zeros((4,5)))
print(np.ones((4,5)))
print(np.ones(10))
print(np.empty((2,3,2)))
print(np.empty((4,5)))

  注意:认为np.empty()会返回全0数组的想法是不安全的。很多情况下,他返回的都是一些未初始化的垃圾值。

 

posted @ 2020-09-21 00:11  goldstine  阅读(312)  评论(0)    收藏  举报