首页 > 其他分享 >NumPy数组图解

NumPy数组图解

时间:2024-02-26 14:12:59浏览次数:19  
标签:数组 张量 np 一维 print array 图解 NumPy

N维数组的属性

  如果说强大而完备的第三方库,赋予了Python独特的魅力,那么N维数组(ndarray)便使得 NumPy拥有了灵魂。我们仅以NumPy的一维数组为例介绍了一些函数的应用。 而实际上,在机器学习中,要处理的数组大多数是N维的。 需要说明的是,在物理内存中是不存在N维数组的,限于存储介质的物理特性,它永远只有一维结构。

可视化物理内存分布:

 

NumPy数组的逻辑图(数学)

 

我们常见的便于理解的N维数组仅仅是“逻辑视图”,它们不过是包装出来的。
一个N维数组就是一个通用的同类数据容器,也就是说它包含的每个元素数据类型均相同。每个数组的维度(dimension)都由一个 ndim 属性来描述。

import numpy as np # 导入 numpy
my_array = np.arange(1, 10) # 创建一个一维数组

my_array.ndim
print(my_array)
View Code

shape

对于N维数组而言,它还有一个重要的属性一shape(数组的形状)。

形状主要用来表征数组每个维度的数量。一维数组的形状就是它的长度,有时候,一维数组也被称为lD张量0(1D Tensor).

 

import numpy as np # 导入 numpy
my_array = np.arange(1, 10) # 创建一个一维数组


print(my_array)
print(my_array.shape)  
View Code

张量

张量(Tensor)是矩阵在任意维度上的推广,张量的维度通常称为轴(axis)。 0D张量:只包括一个数字的张量,如常数、3或3.14。 1D张量:一维数组,也称为向量,如[1,2,3]。 2D张量:二维数组,也称为矩阵,如[[3,6],[9,12]] 3D张量及更高维张量:多个矩阵(2D张量)可构造成一个新的3D张量,如[[[1,1,1],[2,2,2],[3,3,3],[4,4,4]]]。

多个3D张量可以构造成一个4D张量,以此类推。在表达上,张量方括号的层次有多深,就表示这是多少维张量。

reshape()

在上述代码中,处查看了一维数组的形状信息(即向量的尺寸),其输出结果为数组的长度。但NumPy数组形状并不是一成不变的,可以通过 reshape()方法将原有数组进行“重构”(变形)

b = np.arange(15) # 创建15个元素的一维数组
print(b)

b = b.reshape(3, 5) # 改变数组形状为 3 行 5 列
print(b)

print(b.ndim)# 查看维度
print(b.shape) # 数组的形状
print(b.size) # 查看数组元素的总个数
View Code

在 reshape() 重构操作,把一个一维数组转换成了一个二维数组,输出了形状。在这个形状信息中,第一个数字表示行数,第二个数字表示列数,二维数组也被称为2D张量。

我们通过重构操作,把一个一维数组转换成了一个二维数组,在这个形状信息中,第一个数字表示行数,第二个数字表示列数。有时,二维数组也被称为2D张量。

3D

这里需要注意的是,NumPy表示三维数组维度信息的方式和我们通常的认知稍有不同。

比如,我们想创建两个3行5列的数组,它的形状参数为(2,3,5),而不是(3,5,2),如图6所示。通常三维数组也被称为3D张量,以此类推。

 

 一个小正方形也可以是三维数组,一排4*3的也可以看成是三维数组。这两种情况而言,三维数组的第三个参数不太一样而已,是1.

a = np.arange(30).reshape(2,3,5) # 重构数组为2 通道 3行5列
print(a)

[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]

[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]]

 

a=np.array([1,2,3])
print(a.ndim)
b=np.array([[1,2,3],[4,5,6]])
print(b.ndim)

 

只要是[]中括号嵌套三层的,那么就是三维数组,否则就不是。

当然嵌套在最内层的,可以是一个元素的数组,就是一个。假如是好几个,就相当于上面的图中的一层元素的每一排。

标签:数组,张量,np,一维,print,array,图解,NumPy
From: https://www.cnblogs.com/shiningleo007/p/18034215

相关文章

  • 线性数据结构:数组、受限数组(栈、队列)、线性表
    1.数组数组定义  数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。数组特点  数组的关键在于在内存中的物理地址对应的是一段连续的内存。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位......
  • vue3+vite使用vue-pdf-embed或者pdf-vue3预览 PDF 文件(能躲避 XSS 攻击,需要 pdf 文件
    1.使用vue-pdf-embed1.npm安装所需插件[email protected]@0.1.62.封装组件(创建pdfPriview.index文件)<template><divclass="pdf-preview"> <vue-pdf-embed :source="state.source" v-for="pageinstate......
  • Java中的数组-暂未完结
    数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。◆其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组声明创建◆首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的......
  • 【leetcode】数组篇刷题 --滑动窗口
    /**@lcapp=leetcode.cnid=209lang=cpp**[209]长度最小的子数组*找最短的子数组*///@lccode=startclassSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){//滑动窗口,//一个计算总和intsum=0;......
  • Leetcode 560 和为k的子数组
    Problem:560.和为K的子数组难点怎么通过前缀和找到和为k的子数组如官方题解所言,[j···i]的子数组=k可转化为pre[i]-pre[j-1]==k要找到前缀和找到和为k的子数组个数就是“找到当前前缀和pre[i]-之前求得的前缀和=k”的总情况。我们通过哈希表记录每个前缀和(的值)出......
  • 提高组算法-树状数组
    树状数组是当序列动态变化时,依然可以高效率的查询和维护前缀和(或区间和)的数据结构。实现思路现在有\(16\)个数字:\(a[]={1,8,5,9,6,3,9,8,7,2,3,9,6,4,1,7}\)。我们要实现\(2\)个函数:修改其中某个元素的数值。求出前\(n\)个数字的和。但是,这\(2\)个函数要在极......
  • POJ--3468 A Simple Problem with Integers(线段树/树状数组)
    记录11:032024-2-25http://poj.org/problem?id=1961线段树树状数组把区间增加转变为单点增加,利用两个树状数组\(c_0和c_1\)将”Clrd"转化为在树状数组\(c_0\)中,把位置l上的数加d在树状数组\(c_0\)中,把位置r+1上的数减d在树状数组\(c_1\)中,把位置l上的数......
  • 代码随想录算法训练营第二天| 977.有序数组的平方
    第一题题解首先写了一个初步解,后续再想优化思路classSolution:defsortedSquares(self,nums:List[int])->List[int]:#sortbytheabsofvalueabs_min=10000abs_min_index=0foriinrange(len(nums)):if......
  • python list 动态数组
    list 对象是一种 容量自适应 的 线性容器 ,底层由 动态数组 实现。动态数组结构决定了 list 对象具有优秀的尾部操作性能,但头部操作性能却很差劲。容量调整当我们调用 append 、pop 、insert 等方法时,列表长度随之发生变化。当列表长度超过底层数组容量时,便需要......
  • 2024-02-24:用go语言,给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1, 同时还有一
    2024-02-24:用go语言,给你一个n个点的带权无向连通图,节点编号为0到n-1,同时还有一个数组edges,其中edges[i]=[fromi,toi,weighti],表示在fromi和toi节点之间有一条带权无向边,最小生成树(MST)是给定图中边的一个子集,它连接了所有节点且没有环,而且这些边的权值和最......