Numpy:ndarray数据类型和运算
Numpy的ndarray:一种多维数组对象
N维数组对象,该对象是一个快速而灵活的大数据集容器,nadarry是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)
import numpy as np
# 创建ndarry
# 创建数组最简单的方法就是使用array函数,它接受一切序列型的对象
data1 = [6,7.5,8,0,1]
# 然后产生一个新的含有传入数据的NumPy数组
arr1 = np.array(data1)
arr1
array([6. , 7.5, 8. , 0. , 1. ])
# 嵌套序列将会被转换为一个多维数组
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
arr2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr2.shape # 形状 二维数组,每一个维度4个值
(2, 4)
# np.array会尝试为新建的这个数组推断出一个较为合适的数据类型,保存在一个特殊的dtype对象中
arr1.dtype
dtype('float64')
arr2.dtype
dtype('int32')
# 除np.array之外,还有一些函数也可以新建数组
# 见词知意,新建10个全是0的数组
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
# 见词知意,新建10个全是1的数组
np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.zeros((3,5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
# empty不是见名知意了,它返回的都是一些未初始化的垃圾值
np.empty((3,5,2))
array([[[1.22955771e-311, 9.58487353e-322],
[0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 5.02034658e+175],
[4.66725104e-062, 4.01832345e-057],
[9.51657595e+169, 3.34722073e-033]],
[[1.47763641e+248, 1.16096346e-028],
[7.69165785e+218, 1.35617292e+248],
[3.10139001e+179, 9.15011178e-071],
[1.13823902e-042, 1.33689723e+165],
[4.30420903e-096, 6.32299154e+233]],
[[6.48224638e+170, 5.22411352e+257],
[5.74020278e+180, 8.37174974e-144],
[1.41529402e+161, 9.16651763e-072],
[4.10024115e+097, 5.06265680e-038],
[3.75559122e+126, 1.58268989e-319]]])
| 函数 | 说明 |
|---|---|
| array | 将输入数据(列表、元组、数组或其他序列类型)转为ndarray。要么推断出dtype,要么显式指定dtype |
| asarray | 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制 |
| arange | 类似于内置的range,但返回的是一个ndarray而不是列表 |
| ones、ones_like | 根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组 |
| zeros、zeros_like | |
| empty、empty_like | 创建新数组,只分配内存空间但不填充任何值 |
| eye、identity | 创建一个正方的N*N单位矩阵(对角线为1,其余为0) |
# asarray将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制
np.asarray([1,2,3,4,5])
array([1, 2, 3, 4, 5])
#array将输入数据(列表、元组、数组或其他序列类型)转为ndarray。要么推断出dtype,要么显式指定dtype\
# 指定dtype
arr3 = np.array([1,2,3],dtype = np.float64)
arr3.dtype
dtype('float64')
arr4 = np.array([4,5,6],dtype = np.int32)
arr4.dtype
dtype('int32')
numpy的数据类型
| 类型 | 类型代码 | 说明 |
|---|---|---|
| int8、uint | i1、u1 | 有符号和无符号的8位整型 |
| int16、uint16 | i2、u2 | 有符号和无符号的16位整型 |
| int32、uint32 | i4、u4 | |
| int64、uint64 | i8、u8 | |
| float16 | f2 | 半精度浮点数 |
| float32 | f4或f | 标准的双精度浮点数 |
| float64 | f8或d | 标准的双精度浮点数 |
| float128 | f16或g | 扩展精度浮点数 |
| complex64、complex128、complex256 | c8、c16、c32 | 分别用两个32位、64位或128位浮点数表示的复数 |
| object | O | Python对象类型 |
| string_ | S | 固定的长度的字符串类型(每个字符1个字节),例如要创建一个长度为10的字符串,应使用S10 |
| unicode_ | U | 固定长度的unicode类型(U10) |
# 显式转换dtype
arr6 = np.array([1,2,3,4,5])
dtype('int32')
arr6.dtype
dtype('float64')
# 如果将浮点数转换成整数,则小数部分将会被截断
arr8 = np.array([3.7,-1.2,2.6,0.5,12.9,10.1])
arr8.dtype
dtype('float64')
arr9 = arr8.astype(np.int32)
arr9.dtype
arr9
array([ 3, -1, 2, 0, 12, 10])
# 如果某字符串数组表示的全是数字,也可以转换为数值形式
arr10 = np.array(['1.25','-9.6','42'], dtype = np.string_)
arr10
array([b'1.25', b'-9.6', b'42'], dtype='|S4')
arr11 = arr10.astype(np.float32)
arr11
array([ 1.25, -9.6 , 42. ], dtype=float32)
# 数组的dytpe另一个用法
int_array = np.arange(10)
int_array
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
calibers = np.array([.22,.270,.357,.44,50],dtype = np.float64)
# 复制类型
int_array.astype(calibers.dtype)
# 调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使dtype跟老dtype相同也是如此
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
数组和标量之间的运算
数组的意义是让你不写循环即可完成数据批量运算,这通常叫矢量化
大小相等的数组之间的任何运算都会将运算应用到元素级
不同大小的数组之间的运算叫做广播
arr12 = np.array([[1.,2.,3.],[4.,5.,6.]])
arr12
array([[1., 2., 3.],
[4., 5., 6.]])
arr12 * arr12
array([[ 1., 4., 9.],
[16., 25., 36.]])
arr12 - arr12
array([[0., 0., 0.],
[0., 0., 0.]])
1 / arr12
array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
arr12 ** 0.5
array([[1. , 1.41421356, 1.73205081],
[2. , 2.23606798, 2.44948974]])
Numpy:ndarray数据类型和运算的更多相关文章
- 3.1Python数据处理篇之Numpy系列(一)---ndarray对象的属性与numpy的数据类型
目录 目录 (一)简单的数组创建 1.numpy的介绍: 2.numpy的数组对象ndarray: 3.np.array(list/tuple)创建数组: (二)ndarray对象的属性 1.五个常用 ...
- Python中Numpy ndarray的使用
本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...
- Numpy Ndarray对象1
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指 针.这样为了保存一个简单的[1,2,3],需要有3个指针和三 ...
- python:<class 'numpy.ndarray'>的学习
在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2 ...
- ndarray数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息 In [18]: sim1 = np.array([1,2,3],dtype=np.float64) ...
- NumPy 中的集合运算
怎样快速找出两个数组中相同的元素? numpy.isin(element,test_elements,assume_unique = False,invert = False ) 计算test_ele ...
- NumPy Ndarray 对象
NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放 ...
- torch.Tensor和numpy.ndarray
1. torch.Tensor和numpy.ndarray相互转换 import torch import numpy as np # <class 'numpy.ndarray'> np ...
- ndarray数据类型及转换
ndarray数据类型 Ndarray的基本数据类型如下图所示,数据类型的命名采用“类型名+数字”的形式表示,数字表示数据的比特位长.在计算机中比特位bit是表示数据最小的单位,1个字节Byte的长度 ...
随机推荐
- python venv actieve uninstall pack-name sitepage
- <转载> MySQL 架构 http://www.cnblogs.com/winner-0715/p/6863802.html
1.MySQL整体逻辑架构 我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture) 图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都 ...
- django之signal机制分析
django的signal在djangobb中的使用: from django.db.models.signals import post_save from django.dispatch impo ...
- js判断用户是客户端还是移动端
js判断用户是客户端还是移动端 Javascript 判断客户端是否为 PC 还是手持设备,有时候项目中需要用到,很方便的源生检测,方法一共有两种 1.第一种: function IsPC() { ...
- 静态方法@staticmethod
staticmethod 返回函数的静态方法.该方法不强制要求传递参数,名义上在类里面归类管理,但是不能使用类的变量和实例的变量是类的工具包 如下声明一个静态方法: class Room: t = 1 ...
- ADOQuery.Parameters: Property Parameters does not exist
Exception class EReadError with message 'Property Parameters does not exist'. Exception class EReadE ...
- 机器学习入门-数值特征-对数据进行log变化
对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布 因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布 进行log变化,就是对数据使用n ...
- C# 申请非托管内存
方式一:使用 stackalloc 关键字 int* block = stackalloc int[100]; 注:此关键字仅在局部变量初始值设定项中有效. 以下代码导致编译器错误. int* blo ...
- mysqldump: Got error: 1066: Not unique table/alias
mysqldump: Got error: 1066: Not unique table/alias myql 导出时提示如下: [root@localhost mysql]# mysqldump ...
- 配置maven访问nexus,配置项目pom.xml以发布maven项目到nexus中
maven访问nexus有三种配置方法,分别为: 项目pom.xml,优先级最高: user的settings.xml,优先级中,未在pom.xml中配置repository标签,则使用这个配置: m ...