什么是数组的维度,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的使用的主要内容,如果未能解决你的问题,请参考以下文章

python关于numpy基础问题

python 里 np.array 的shape (2,)与(2,1)的分别是什么意思,区别是什么?

Numpy

二、ndarray 的属性、数据类型

numpy使用

python-Numpy学习之ndimshapedtypeastype的用法