什么是数组的维度,python 的ndim的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是数组的维度,python 的ndim的使用相关的知识,希望对你有一定的参考价值。
参考技术A NumPy数组(1、数组初探)更新
目前我的工作是将NumPy引入到Pyston中(一款Dropbox实现的Python编译器/解释器)。在工作过程中,我深入接触了NumPy源码,了解其实现并提交了PR修复NumPy的bug。在与NumPy源码以及NumPy开发者打交道的过程中,我发现当今中文NumPy教程大部分都是翻译或参考英文文档,因此导致了许多疏漏。比如NumPy数组中的broadcast功能,几乎所有中文文档都翻译为“广播”。而NumPy的开发者之一,回复到“broadcast is a compound -- native English speakers can see that it's " broad" + "cast" = "cast (scatter, distribute) broadly, I guess "cast (scatter, distribute) broadly" probably is closer to the meaning(NumPy中的含义)"。有鉴于此,我打算启动一个项目,以我对NumPy使用以及源码层面的了解编写一个系列的教程。
地址随后会更新。CSDN的排版(列表)怎么显示不正常了。。。
NumPy数组
NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:
实际的数据
描述这些数据的元数据
大部分操作仅针对于元数据,而不改变底层实际的数据。
关于NumPy数组有几点必需了解的:
NumPy数组的下标从0开始。
同一个NumPy数组中所有元素的类型必须是相同的。
NumPy数组属性
在详细介绍NumPy数组之前。先详细介绍下NumPy数组的基本属性。NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
NumPy的数组中比较重要ndarray对象属性有:
ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)。
ndarray.shape:数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性。
ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积。
ndarray.dtype:表示数组中元素类型的对象,可使用标准的Python类型创建或指定dtype。另外也可使用前一篇文章中介绍的NumPy提供的数据类型。
ndarray.itemsize:数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),又如,一个元素类型为complex32的数组item属性为4(32/8)。
ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
创建数组
先来介绍创建数组。创建数组的方法有很多。如可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
numpy快速入门
一 Numpy概述
1.定义
开源的python科学计算库
用于快速处理任意维度的数组
Numpy中存储对象ndarray
2.创建
np.array
3.优势
内存块风格,一体化存储
支持并行化运算
效率高与纯python–底层使用了c
二 N维数组 ndarray
1.ndarray的属性
属性名字 属性解释
ndarray.shape 数组维度元组
ndarray.ndim 数组维度
ndarray.size 数组中元素数量
ndarray.itemsize 一个数组元素的长度
ndarray.dtype 数组元素的类型
2.ndarray的类型
-
bool
-
int
-
float
-
str
注意:若不指定,整数默认int64,float64
三 基本操作
1.生成数组的方法
生成0,1的方法
- np.ones()
- np.ones_like()
- np.zeros()
1.2 从现有的数组中生成
np.array–深拷贝
np.asarray–浅拷贝
1.3生成固定范围的数组
-
np.linspace()
生成等间距的n个
-
np.arange()
每隔多少个生成数据
-
np.logspace
生成以10的N次幂的数据
1.4生成随机数组
均匀分布生成
np.random.uniform()
参数:low,high,size
正态分布
np.random.normal()
参数:均值,方差,size
均值:图形的左右位置
方差:图像是瘦还是胖
值越小,图形瘦高,数据越集中
值越大,图形矮胖,数据越分散
2.数组的索引、切片
直接索引
先对行进行索引,再对列进行索引
3.类型的修改
对象.astype
4.数组去重
np.unique()
四 ndarray运算
1.逻辑运算
大于,小于直接进行判断
赋值:满足要求,直接进行赋值
a = np.array([[1, 2, 3, 4, 4], [1, 2, 3, 3, 5]])
a >= 4
a[a >= 4] = 0 # 可以根据bool进行赋值
a
2.通用判断函数
np.all()
所有满足要求,才返回True
np.any()
只有一个满足要求,就返回True
3.三元运算符
np.where()
满足要求赋值第一个值,否则赋值第二个值
a = np.array([[1, 2, 3, 4, 4], [1, 2, 3, 3, 5]])
np.where(a>1,1,0)# 第一个参数逻辑判断,第二三个参数赋对应的值
np.logical_and()
np.logical_or()
a = np.array([[1, 2, 3, 4, 4], [1, 2, 3, 3, 5]])
np.where(np.logical_and(a>=4,a<=5),1,0)
4.统计运算
min
max
midian–中位数
mean–平均值
std–标准差
var–方差
argmax–最大值下标
argmin–最小值下标
五 矩阵
1.矩阵和向量
矩阵:二维数组
向量:一维数组,行向量和列向量
2.加法和标量乘法
加法:对应位置相加
乘法:标量和每个位置的元素相乘
3.矩阵向量乘法
【M行,N列】x【N行,O列】=【M行,O列】
4.矩阵乘法性质
满足结合律不满足交换律
5.单位矩阵
对角线为1,其他位置为0的矩阵
6.逆矩阵
矩阵A*举证B=单位矩阵I
那么A和B互为逆矩阵
7.转置
行列互换
六 数组间运算
1.数组和数字是直接可以进行运算
2.数组和数组
满足广播机制
纬度相同
shape对应位置为1
import numpy as np
arr1 = np.array([1, 2])
arr2 = np.array([[1], [1], [1], [1]])
arr1+arr2
3.矩阵乘法api
np.dot–点乘
np.matmul–矩阵相乘
注意:np.dot既可以进行标量相乘,也可以进行向量乘法。np.matnul只能进行向量乘法
import numpy as np
arr1 = np.array([1, 2])
num=3
arr2 = np.array([[2], [2]])
res1=np.dot(arr1,1)
res1
res2=np.dot(arr1,arr2)
res2
res3=np.matmul(arr1,arr2)#只能两个矩阵相乘
res3==res2
numpy官网文档
以上是关于什么是数组的维度,python 的ndim的使用的主要内容,如果未能解决你的问题,请参考以下文章