对 Numpy 认识_numpy 理解-程序员宅基地

技术标签: 数据分析  

一、对 Numpy 认识

Numpy 是用于数据科学计算的基础,不但能够完成科学计算任务,还能被用作高效地多 维数据容器。用于存储和处理大型矩阵

Python 提供了一个 array 模块,和 list 不同,它直接保存数值,但是由于 Python 的 array 模块不支持多维,也没有各种运算函数

Numpy 弥补了这一遗憾,Numpy 提供了一种数组对象—ndarray(下文统称数组)

关于 ndarray 数组对象的认识:

是一种内存连续的、存储单一数据类型的、可以存储多维数组的对象

存在两种存储方式:

C 风格存储(C 语言风格) ----行优先存储

F 风格存储(Fortran 语言风格)—列优先存储

二、数组创建

1、Numpy.array 函数创建一维或多维数组

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

参数名称 说明
object 接收 array,表示想要创建的数组,无默认
dtype 接收 data-type。表示数组所需的数据类型。如果未给定,则选择保存对象 所需的最小类型。默认为 None
ndmin 接收 int,指定生成数组应该具有的最小维数,默认为 None
三、数组属性

Ndarray 是一个数组对象,对象都拥有以下属性:

属性 说明
ndim 返回 int,表示数组的维数
shape 返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m)
size 返回 int,表示数组的元素总数,等于数组形状的乘积
dtype 返回 data-type,描述数组中元素的类型
itemsize 返回 int,表示数组的每个元素的大小(以字节为单位)

其中 shape 及 ndim 属性,可以参考下图来理解:

代码实现:

# 1、导包
import numpy as np

# 2、创建数组
# 可以使用np.array将列表对象转化ndarray数组对象
# arr = np.array([1, 2, 3, 4])
# print('arr:\n', arr)  # [1 2 3 4]
# print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>

#
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 0]])
print('arr:\n', arr)
#  [[1 2 3 4]
#  [5 6 7 8]]

print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>
print('*' * 100)

# arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 0]],[[1, 2, 3, 4], [5, 6, 7, 0]]])
# print('arr:\n', arr)
# #  [[1 2 3 4]
# #  [5 6 7 8]]
#
# print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>
# # print('*' * 100)

# 3、研究数组对象属性
# ndim shape size dtype itemsize
print('arr 的 ndim属性:', arr.ndim)  # 数组的维度
print('arr 的 shape属性:', arr.shape) # 数组的形状,元组类型
print('arr 的 size 属性:', arr.size)  # 数组中元素的个数
# print('arr 的 dtype 属性:', arr.dtype)  # 数组中元素的数据类型 int32 --->numpy中的数据类型 --->32位平台的int类型
# print('arr 的 itemsize 属性:', arr.itemsize) # 每一个元素的占位大小,单位为字节


# ndim  shape  size
# len(shape) = ndim
# size = shape中元素的乘积
四、数据元素类型

在实际业务数据处理时,为了更精确的计算结果,需要使用不同的数据类型,Numpy 极大程度地扩充了原生python数据类型,其中大部分数据类型是以数字结尾的,这个数字表 示在内存中占有的位数,同时强调一点,在Numpy中,所有数据类型都是同质的,即数组中的所有元素类型必须是一致的,这样做的好处是,更容易确定该数组所需要的存储空间

如下表展示:

类型 描述
bool 用一位存储的布尔类型(值为 TRUE 或 FALSE)
inti 由所在平台决定其精度的整数(一般为 int32 或 int64)
int8 整数,范围为−128 至 127
int16 整数,范围为−32768 至 32767

对于数组元素类型的使用,可以在创建数组的时候,通过 dtype 参数来指定数组的元素 类型,如:在创建全部为 0,全部为 1 的数组的时候,就可以使用 dtype 参数

其实,numpy 中的数据类型也可以进行强制转换,也可以进行存储复合的数据,如:

import numpy as np

# numpy中的数据类型
# ---封装了Python中的数据类型,并进行了细致划分 ---->变为了numpy.数据类型
# np.int32  np.int64  np.float32 np.float64 .......

# (1) 可以在创建数组的 时候通过dtype参数来指定创建的数组的类型
arr = np.array([1, 2, 3, 4], dtype=np.float64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

arr = np.array([1, 2, 3, 4], dtype=np.int64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

# 创建一个bool数组
# 注意:0代表False   非0代表True
arr = np.array([1, 2, 3, 0], dtype=np.bool)
print('arr:\n', arr)  # [ True  True  True False]
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

# (2) 也可以进行数据的强转换
print('将数值转化为bool类型:',np.bool(1))
print('将整型数据转化为float类型:',np.float32(3))
# print('将字符串a转化为float类型:',np.float64('a')) # 错误的
print('将字符串10转化为float类型:',np.float64('10'))

# # (3)了解、知道:ndarray可以存储不同类型的数据 --->转化 ---对象类型
# # 存储 ---个人信息---姓名(str) height(float) weight(float)
# # 通过自定义dtype来实现
df = np.dtype([('name', np.str, 20
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/markshui/article/details/108192707

智能推荐

spring boot 异常处理_serverproperties getservletprefix() springboot 2.0-程序员宅基地

文章浏览阅读4.9k次。spring boot在异常的处理中,默认实现了一个EmbeddedServletContainerCustomizer并定义了一个错误页面到”/error”中,在ErrorMvcAutoConfiguration源码中可以看到/** * {@link EmbeddedServletContainerCustomizer} that configures the container's error_serverproperties getservletprefix() springboot 2.0

jQuery实现页面滑动时导航背景色切换_jquery仿导航栏向下滑动导航栏变色-程序员宅基地

文章浏览阅读774次,点赞2次,收藏2次。<script type="text/javascript" src="./files-m/jquery-1.9.1.min.js"></script><script >//网页加载时运行$(function(){ navHeader(); $(window).scroll(function () { navHeader(); }) function navHeader() { if ($(windo_jquery仿导航栏向下滑动导航栏变色

错用mybatis映射文件#和$导致的问题_mybatis #{list.size} 预编译失败-程序员宅基地

文章浏览阅读254次。如下Mapper.xml文件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="c..._mybatis #{list.size} 预编译失败

rust-lldb调试Rust程序-程序员宅基地

文章浏览阅读1.2k次。rust-lldb如何调试带有选项的程序# rust-lldb -- target/debug/racon --root /opt/run/racon run 2333 --bundle /opt/mycontainer/很简单只需要在rust-lldb与程序之间添加 --_lldb调试rust

/usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) ...-程序员宅基地

文章浏览阅读652次。/usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version! RequestsDependencyWarning)[root@iZwz9..._installed /usr/lib/python2.7lsite-packages/

解决IDEA @Test不能自动导包问题 JUnit4 was not loaded_junit4 was not loaded.-程序员宅基地

文章浏览阅读4.6k次,点赞27次,收藏40次。解决 IDEA @Test 不能自动导包问题 JUnit4 was not loaded_junit4 was not loaded.

随便推点

Visual Studio各版本区别-程序员宅基地

文章浏览阅读119次。Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。V.S.2012  .1、VS2012和VS2010相比,最大的新特性莫过于对Windows 8 Metro开发的支持。Metro天生为云+端而生,简洁、数..._visual studio 各个版本的区别

列表排序-程序员宅基地

文章浏览阅读41次。原理:  1、用rows方法获取到所有的行并放进Array里,不能用for..in的方式获取,因为for..in会获取所有rows方法相关的参数。  2、用sort方法或其他排序方法Function参数进行排序。  3、创建Fragment元素,append方法会将所有原table内容转移至Fragment元素内。  4、table元素加载Fragment。..._"排序\">"

【论文摘要】基于多数投票模式和超混沌加密的彩色图像鲁棒安全零水印算法_多数投票机制 水印-程序员宅基地

文章浏览阅读1.8k次。Robust and secure zero-watermarking algorithm for color images based on majority voting pattern and hyper-chaotic encryption标题:基于多数投票模式和超混沌加密的彩色图像鲁棒安全零水印算法作者:Xiao-bing Kang,Guang-feng Lin,Ya-jun Chen,Fan Zhao,Er-hu Zhang,Cui-ning Jing发布年份:2019摘要:鲁棒零水_多数投票机制 水印

Windows下用anaconda装python,添加jupyter的kernel以及装包_jupyter kernel没有安装包但可以用-程序员宅基地

文章浏览阅读5.1k次。环境:Windows 7 主要问题: 1. 先在anaconda官网上下载了python3+的版本,其他人安装时一般先安装python2再安装python3,没有相关经验可供参考;2. 安装anaconda时选了非默认路径(C盘某处),安装在D盘下,为后来的cmd调用命令造成了困难,无法用cd更换路径解决;3. 安装完python2的jupyter notebook的kernel时_jupyter kernel没有安装包但可以用

即将上线主网的Telegram区块链和Libra,谁的野心更大?-程序员宅基地

文章浏览阅读391次。两者在穿越两年之后十分戏剧化地 “会面” 了。文 | 芦荟 运营 | 盖遥编辑| 卢晓明出品|Odaily星球日报(ID:o-daily)继 Facebook..._fiftusdt

C++基础三_设有一组结点,其权值w={1,4,9,16,25,36,49,64,81,100},画出由这些结点所-程序员宅基地

文章浏览阅读189次。C++基础学习三对象的构造和析构构造函数和析构函数构造函数语法:析构函数语法:构造函数的分类及调用匿名拷贝构造函数(错误)拷贝构造函数的调用时机构造函数调用规则深拷贝和浅拷贝浅拷贝深拷贝多个对象构造和析构初始化列表类对象作为成员explicit关键字动态对象创建对象创建C动态分配内存(隐患)newdelete用于数组的new和delete使用new和delete采用相同形式delete void*..._设有一组结点,其权值w={1,4,9,16,25,36,49,64,81,100},画出由这些结点所构成