打造属于自己的量化投资系统7——Numpy的数组基础用法

1.numpy简介

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组,的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
  • 跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1]
2.ndarry对象

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

  • object:数组或嵌套的数列 dtype:数组元素的数据类型,可选 copy:对象是否需要复制,可选
  • order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) subok:默认返回一个与基类类型一致的数组
  • ndmin:指定生成数组的最小维度
import numpy as np

#numpy.array(object, dtype = None, copy = True, order = None, 
#              subok = False, ndmin = 0)

#一维数组
np_array=np.array([1,2,3])
print(np_array)

#2维数组
np_array2=np.array([[1,1,1],[2,2,2]])
print(np_array2)


#n维数组
#np_arrayn=np.array([[1,1,1],[2,2,2],[3,3,3]...])

#ndmin:指定生成数组的最小维度
#例如指定生成3维度
np_array_ndmin2=np.array([1,2,3,4,5],ndmin=3)
print(np_array_ndmin2)
3.ndarray数据类型

numpy.dtype(object, align, copy)

  • object - 要转换为的数据类型对象
  • align - 如果为 true,填充字段使其类似 C 的结构体。
  • copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
import numpy as np
#numpy.dtype(object, align, copy)

#使用标量类型
np_dt_bool=np.dtype(np.bool_)
print(np_dt_bool)
np_dt_int=np.dtype(np.int64)
print(np_dt_int)

#darry调用数据类型,例如调用整型
np_array_dt_int=np.array([1,2,3],dtype=np_dt_int)
print(np_array_dt_int)

4.ndarray数组属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

  • ndarray.ndim :秩,即轴的数量或维度的数量
  • ndarray.shape :数组的维度,对于矩阵,n 行 m 列
  • ndarray.size :数组元素的总个数,相当于 .shape 中 n*m 的值
  • ndarray.dtype :ndarray 对象的元素类型
  • ndarray.itemsize: ndarray 对象中每个元素的大小,以字节为单位
  • ndarray.flags :ndarray 对象的内存信息
  • ndarray.real :ndarray元素的实部
  • ndarray.imag :ndarray 元素的虚部
  • ndarray.data :包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
import numpy as np

np_array_attribute=np.array([[1,1,1,1,1],[2,2,2,2,2]])
print('数组大小=',np_array_attribute)
np_ndim=np_array_attribute.ndim
print('数组维度=',np_ndim)

#ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,
#即 ndim 属性(秩)。比如,一个二维数组,其维度表示"行数"和"列数"。
np_shape=np_array_attribute.shape
print('数组的维度=',np_shape)

np_reshape=np_array_attribute.reshape(2,5)
np_ndim3=np_reshape.ndim
print('调整以后的数组维度',np_ndim3)


#ndarray.itemsize 以字节的形式返回数组中每一个元素的大小。
np_itemsize=np_array_attribute.itemsize
print(np_itemsize)

5.NumPy 创建数组

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

5.1 numpy.empty 方法
  • numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
  • numpy.empty(shape, dtype = float, order = ‘C’)
  • shape:数组形状
  • dtype:数据类型,可选
  • order:有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
import numpy as np

#numpy.empty(shape, dtype = float, order = 'C')
np_empty=np.empty([2,3],dtype=int)
print(np_empty)
5.2 numpy.zeros方法

创建指定大小的数组,数组元素以 0 来填充:

  • numpy.zeros(shape, dtype = float, order = ‘C’)
  • shape:数组形状
  • dtype:数据类型,可选
  • order:‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
import numpy as np

#numpy.zeros(shape, dtype = float, order = 'C')
np_zeros=np.zeros([2,3],dtype=float)
print('创建数组1',np_zeros)

np_zeros2=np.zeros((2,1),dtype=np.int)
print('创建数组2\n',np_zeros2)
5.3 numpy.ones方法

创建指定形状的数组,数组元素以 1 来填充:
numpy.ones(shape, dtype = None, order = ‘C’)

  • shape:数组形状
  • dtype:数据类型,可选
  • order:‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
import numpy as np

#numpy.ones(shape, dtype = None, order = 'C')
np_ones=np.ones((2,1),dtype=np.int)
print('创建数组\n',np_ones)


5.4 numpy.asarray 方法

numpy.asarray(a, dtype = None, order = None)

  • a:任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
  • dtype:数据类型,可选
  • order:可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序
import numpy as np

#numpy.asarray(a, dtype = None, order = None)
np_asarray_list=np.asarray([5,6,8])
print('将list转换为array数组',np_asarray_list)

np_asarray_tuple=np.asarray((4,7,3))
print('将tuple转换为array数组',np_asarray_tuple)


np_asarray_list_tuple=np.asarray([(5,5,5),(8,8,8)])
print('将元组列表转换为数组',np_asarray_list_tuple)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值