您现在的位置是:首页 > 正文

Numpy基础一:ndarray

2024-01-30 22:51:43阅读 0

1. ndarray对象

numpy中的内置多维数组类型ndarray由一系列同类型数据所构成,并以0作为下标开始索引。ndarray中的每个元素在内存中都有相同的存储大小区域。
ndarray由以下四部分构成:

  • 一个指向数据(内存或内存映射文件中的一块数据)指针
  • 数据类型或 dtype,描述在数组中的固定大小值的格子
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数
     
    请添加图片描述
    [ 0 1 2 3 4 5 6 7 8 ] \begin{bmatrix} 0 & 1 & 2 \\ 3 & 4 & 5 \\ 6 & 7 & 8 \\ \end{bmatrix} 036147258
    在这里插入图片描述
    其中data指向数据的存储区域,dtype用来描述数据类型,dim count用来记录轴数量,dimensions用来刻画每个轴的维度,strides记录的是每个轴下标增量为1时,数据存储区域中的指针所增加的字节数。如图,如果按照0轴方向步进一个单位a[0,1]->a[1,0],数据地址的增量为3*4=12(其中,3代表每一行中元素个数,4代表float32的存储字节数)也即a[1,0]的地址比a[0,0]高12个字节。
    创建一个ndarray只需要调用Numpy的array函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明
名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度

2. 创建ndarray

创建多维数组通常有以下几种方式:

  • 从其他Python array_like结构(例如,列表,元组)转换
  • numpy原生数组的创建(例如,arange、ones、zeros等)
  • 从磁盘读取数组,无论是标准格式还是自定义格式
  • 通过使用字符串或缓冲区从原始字节创建数组

1)将Python array_like对象转换为Numpy数组

通常,在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组。最明显的例子是列表和元组。

>>> x = np.array([2,3,1,0])
>>> x = np.array([2, 3, 1, 0])
>>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,and types
>>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])

2)numpy原生数组创建

使用np.zeros()来进行创建全零数组,默认dtype为float64:

>>> np.zeros((2, 3)) array([[ 0., 0., 0.], [ 0., 0., 0.]])

使用arange()创建规律递增数组:

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=np.float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

使用linspace() 将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。例如:

>>> np.linspace(1., 4., 6)
array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])

3)从磁盘读取

使用np.loadtxt(fname, dtype=np.float, delimiter=None, skiprows=0, usecols=None, unpack=False)从磁盘读取。

参数说明
参数 描述
fname 文件、字符串或者生成器,可以是.gz或bz2压缩文件
dtype 数组元素的数据类型,可选, 默认为np.float
delimiter 分割字符串,默认是任何空格,对于csv可更改为逗号
skiprows 跳过前X行,一般用来跳过表头
usecols 读取指定的列,索引,元组类型
unpack 用来标识是否转置
import numpy as np

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

t1 = np.loadtxt(us_file_path, delimiter=",", dtype="int", unpack=True)
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")

print(t1)
print("*" * 100)
print(t2)

输出结果:

[[4394029 7860119 5845909 ...  142463 2162240  515000]
 [ 320053  185853  576597 ...    4231   41032   34727]
 [   5931   26679   39774 ...     148    1384     195]
 [  46245       0  170708 ...     279    4737    4722]]
 ****************************************************************************************************
[[4394029  320053    5931   46245]
 [7860119  185853   26679       0]
 [5845909  576597   39774  170708]
 ...
 [ 142463    4231     148     279]
 [2162240   41032    1384    4737]
 [ 515000   34727     195    4722]]

可以看到t2为t1的转置矩阵

网站文章

  • token 应该存在 Cookie、SessionStorage 还是 LocalStorage 中?

    3. LocalStorage:将token存储在localStorage中的优点是,即使在浏览器关闭后,localStorage中的数据仍然存在,因此用户可以保持登录状态。2. SessionSto...

    2024-01-30 22:51:13
  • eth0与enp0s0,为什么采用不同的网卡命名方式?

    eth0与enp0s0,为什么采用不同的网卡命名方式?

    旧的网卡命名方式,其网卡名字重启容易变动,无法预测。而新的做成了无状态的,基于fireware/bios/物理硬件插槽位置来确定网卡名字,具有预测性与确定性。可定制自己需要的网卡命名方式。

    2024-01-30 22:51:08
  • 【实验】Linux系统编译安装mysql数据库

    【实验】Linux系统编译安装mysql数据库

    编译安装mysql数据库首先上传mysql的程序包,我们这里使用的是mysql的5.6.36版本,链接:https://pan.baidu.com/s/1dEwaJqk3BMRYB-ejat_kYQ提...

    2024-01-30 22:51:00
  • C++学习15_类和对象(特殊数据成员初始化 特殊成员函数)

    文章目录特殊的数据成员——初始化常量数据成员 ( const ) 和引用数据成员( & )类对象数据成员静态数据成员 ( static )特殊成员函数静态成员函数const成员函数特殊的数据成员—...

    2024-01-30 22:50:31
  • SSL协议详解

    SSL协议详解

    SSL协议分为两层,下层为==SSL记录协议==,上层为==SSL握手协议、SSL密码变化协议和SSL警告协议。== 1.下层为SSL记录协议,主要作用是为高层协议提供基本的安全服务 > 建立在...

    2024-01-30 22:50:24
  • Cannot invoke “org.apache.ibatis.session.SqlSession.close()“ because “sqlSession“ is null

    Cannot invoke “org.apache.ibatis.session.SqlSession.close()“ because “sqlSession“ is null

    MyBatis遇到的神坑 刚才去优化MyBatis的属性配置的时候,使用resultMap,执行测试方法,提示我错误信息 可以看到错误信息 Cannot invoke "org.apache...

    2024-01-30 22:50:17
  • 计算机组成原理名词解释 地址,计算机组成原理名词解释

    匿名用户1级2009-12-27 回答计算机是一种用于高速计算的计算机器,可以进行数值,逻辑计算,并具有存储记忆功能。如果没有没有特别指定,现在的计算机都是指电子计算机。电子计算机由软件和硬件两大系统...

    2024-01-30 22:50:09
  • Android RTL布局适配

    Android RTL布局适配

    丈夫志四海,万里犹比邻。 —曹植《赠白马王彪》 RTL布局是什么 如上图所示,RTL(Right To Left)即视图的表现形式是从右开始向左结束。我们日常更习惯于LTR(Left To Right)视图,但在中东的阿拉伯语系里他们视觉习惯跟我们正好相反,他们更习惯从右向左的视觉形式。 最近公司开发的产品正好需要做RTL适配,本文总结分享在适配RTL过程中的技术要点。 RT...

    2024-01-30 22:49:41
  • Java集合之ArrayList和LinkedList

    Java集合之ArrayList和LinkedList

    Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set ...

    2024-01-30 22:49:33
  • 08 JavaScript

    08 JavaScript

    1. 基本介绍1.JavaScript是一种专门在浏览器编译并执行的编程语言2.JavaScript处理用户与浏览器之间请求问题3.JavaScript采用【弱类型编程语言风格】对【面向对象思想】来进...

    2024-01-30 22:49:26