Numpy的介绍
numpy是一个开源的python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务。使用Numpy比直接使用python要快的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器
ndarray对象
Numpy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合
语文 | 数学 | 英语 |
80 | 85 | 60 |
75 | 95 | 55 |
上面的表格就可以用ndarray进行存储
import numpy as np
# 创建
score = np.array(
[[80,85,60],
[75,95,55]])
type(score) >>> numpy.ndarray
numpy的优势
numpy的内存风格
numpy到底跟原生python列表有不同参考下图:
可以看出在numpy的内存规则中必须保证数据类型一致,而python列表则可以使用不同类型的数据。
从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。
这是因为ndarray中的所有元素的类型都是相同的,而Python列表汇总的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方法找到下一个元素,这虽然也导致了在通用性能方面numpy的ndarray不及python原生list,但在科学计算汇总,numpy的ndarray就可以省去很多循环语句,代码使用方面比python原生list的效率强很多。
ndarray支持并行化运算(向量化运算)
numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算
效率远高于纯python代码
numpy底层使用C语言编写,内部接触了GIL(全局解释器锁),其对数组的操作速度不受python解释器的限制,所以其效率远高于python。
ndarray对象介绍
ndarray的常见属性及方法
属性名字 | 属性解释 |
ndarray.shape | 数组维度的元组,也叫形状 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarry.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
用法测试
score = np.array(
[[80,85,60,78],
[75,95,55,96],
[75,95,55,88],
[85,95,55,79],
[75,95,85,63],
[75,85,55,100]])
print("数组形状:{}\n
数组维度:{}\n
数组元素个数:{}\n
数组中数据类型:{}\n
一个数组元素的长度:{}".format(score.shape,score.ndim,score.size,score.dtype,score.itemsize))
>>>
数组形状:(6, 4)
数组维度:2
数组元素个数:24
数组中数据类型:int32
一个数组元素的长度:4
ndarray的形状(shape)
ndarray.shape输出的是 (行,列)
a = np.array([1,2,3,4]) #一维
b = np.array([[1,2,3],
[4,5,6]]) #二维
c = np.array([
[[1,2,3],
[4,5,6]],
[[7,8,9],
[10,11,12]]
]) #三维
print(a.shape,b.shape,c.shape)
print(a.ndim,b.ndim,c.ndim)
>>>
(4,) (2, 3) (2, 2, 3)
1 2 3
如何更加直观的理解维数和形状?
- 二维数组:
类似于一张二维表,有行有列
- 三维数组:
相当于对二维表进行叠加,最外围的 (0,1,2)分别代表序号为0,1,2的二维数组
ndarray的数据类型
>>> type(score.dtype)
<type 'numpy.dtype'>
dtype是numpy.dtype类型,先看看对于数组来说都有哪些类型
arr = np.array(['python','java','ccc'],dtype=np.string_)
arr2 = np.array([1,2,3,4],dtype=np.int64)
arr2.dtype
>>>
dtype('int64')
Comments | NOTHING