Numpy入门基础用法

numpy的引入

如何保存数据
  • python原生数据结构支持list和dict,虽然很灵活,但空间占用率和时间效率不高。
    • 类型不做限制
    • 空间内可以保存不同的数据结构
    • 优点是灵活,缺点是效率低
a1 = [1, 2]
a1.append('star')
a1
---------------------------------------------------------------------
结果: [1, 2, 'star']

python的array类型

  • python提供了一种只能保存一种类型的数据空间结构,称之为array。
  • 使用array模块进行管理
    • 限制了空间里保存的数据类型大小
    • 限制了灵活性,节约了空间
    • 但功能非常简单,没有提供矩阵,向量类的数学运算行为
import array
b1 = array.array('L', [10, 20])
b1
---------------------------------------------------------------------
结果:array('L', [10, 20])

b1.itemsize
---------------------------------------------------------------------
结果:4

b1.append('hello')
---------------------------------------------------------------------
结果:TypeError Traceback (most recent call last)
<ipython-input-7-244121094456> in <module>
----> 1 b1.append('hello')

TypeError: an integer is required (got type str)

numpy的ndarray类

  • 只能保存一种数据类型
  • 支持python的list的方法

使用np.array()由python list创建

np.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

  • object : arraylike的对象,一般就是list或tuple这样的,或者暴露出_array__方法的对象,该方法返回序列对象的。
  • dtype : 数据的底层存储类型,一般可设置为大小端,字节位数的限制。
  • copy : 是否将object对象进行拷贝,默认为拷贝行为。
  • order : 一般为"C"或"F"的底层数据存储顺序。简单说就是行优先还是列优先查找。
import numpy as np
ar1 = np.array([1, 2, 3])

注意事项:

  • numpy默认ndarray的所有元素的类型是一致的
  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
ar2 = np.array([1, 2, 3.], dtype='<f8')
ar2
---------------------------------------------------------------------
结果:array([1., 2., 3.])

ar2.dtype
---------------------------------------------------------------------
结果:dtype('float64')

ndarray VS List

计算的耗时问题

  • 使用list和ndarray进行计算,会明显发现ndarray的速度优势。
  • 但ndarray对于大数处理,就必须使用object来保存,而这样,速度优势就没有了
import random

a2 = [random.random() for i in range(10000000)]
ar3 = np.array(a2)
%%time
sum(a2)
---------------------------------------------------------------------
结果:CPU times: user 55.5 ms, sys: 988 µs, total: 56.5 ms
Wall time: 56.9 ms
5000498.110454598

%%time
ar3.sum()
---------------------------------------------------------------------
结果:CPU times: user 13.5 ms, sys: 1.7 ms, total: 15.2 ms
Wall time: 12.9 ms
5000498.110454554

ndarray的属性

基本属性
1)、shape

  • 代表数组的形状,所谓的形状可以认为每个轴上有多少个数据
  • 比如二维空间具有行、列的概念,假设有4行,3列的话,那么shape就是一个(4, 3)
data_list = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12],
]
ar1 = np.array(data_list)
ar1
---------------------------------------------------------------------
结果:
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
       
ar1.shape
---------------------------------------------------------------------
结果:(4, 3)

2)、ndim

  • 代表有几个维度,或者称之为有几个轴来代表数据
ar1.ndim
---------------------------------------------------------------------
结果:2

3)、size

  • 代表数组空间里元素的总个数
ar1.size
---------------------------------------------------------------------
结果:12

4)、itemsize

  • 每个元素的空间大小
ar1.itemsize
---------------------------------------------------------------------
结果:8

5)、dtype

  • 每个元素的数据类型
ar1.dtype
---------------------------------------------------------------------
结果: dtype('int64')

猜你喜欢

转载自blog.csdn.net/weixin_43958804/article/details/88023339