Python数组中的维度小结

这篇博客详细介绍了如何通过数组的shape属性查看其维度,并通过实例解析了如何构建特定维度的NumPy数组。同时,文章讨论了在 TensorFlow 中使用tf.newaxis进行张量维度调整的操作,解释了tf.argmax函数在降维过程中的工作原理,并通过示例展示了维度增加的过程。此外,还提到了使用joblib库保存和加载numpy数组的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.shape查看数组维度.
正序例子:

import numpy as np
a=np.array([[[[1,2,3,4],[5,6,7,8],[0,0,0,0]],[[1,2,3,4],[5,6,7,8],[0,0,0,0]]]])
a.shape
(1,2,3,4)

逆推分析:
要想生成(1,2,3,4)这样的4维数组,那么最外层’[‘的数量得是4,形如[[[[.
第一个数要想是1,就得看这其中四级括号中[’[[[]]]‘],三级’[‘的数量得是1个,形如[[[[.]]]]
第二个数要想是2,就得看这其中三级括号中[[’[[]]‘]],二级’[‘的数量得是2个,形如[[[],[]]]
第三个数要想是3,就得看这其中二级括号中[[[’[]‘]]],一级’[‘的数量得是3个,形如[[[[],[],[]]]]
第四个数要想是4,就得看这其中一级括号中[[[[’‘]]]],元素的数量得是4个,形如[[[[’‘,’‘,’‘,’‘]]]]
组合以上信息就可以得到生成(1,2,3,4)这样的4维数组的形状,[[[[’‘,’‘,’‘,’‘],[’‘,’‘,’‘,’‘],[’‘,’‘,’‘,’‘]],[[’‘,’‘,’‘,’‘],[’‘,’‘,’‘,’‘],[’‘,’‘,’‘,’']]]]

关于’[…, tf.newaxis]‘中的’tf.newaxis’,简单理解其实就是为了在最后增加一个维度来适配模型输入输出所需要的整体维度,例如上述a如果是一个张量矩阵,维度为(1,2,3,4),经过以下操作变换

pred1.shape
(1,2,3,4)
pred_1 = tf.argmax(pred1, axis=-1)
pred_1.shape
TensorShape([1, 2, 3])
pred_1 = pred_1[..., tf.newaxis]
pred_1.shape
TensorShape([1, 2, 3, 1])

其中tf.argmax(pred1, axis=-1)的操作简单理解可以认为是降维,其中参数分别代表张量矩阵和需要降维的轴,-1代表最后一轴,进行矩阵的降维
例如一个222的矩阵
[[[1,2],
[3,4]]
[[1,4],
[3,2]]]
相当于是一个2层的2*2的8个积木堆在一起,然后如果此时axis=0,就按照习惯上称为z轴的方向上进行’压缩’.具体的例如’1’和’1’进行argmax,取1;'2’和’4’进行argmax,取4;'3’和’3’进行argmax,取3;'4’和’2’进行argmax,取4;最后得到一个二维张量矩阵
[[1,4],
[3,4]]
此时可以想象成是一个0层的2行2列的积木堆在一起
如果此时接着进行升维操作,例如上述的tf.newaxis操作,则会得到一个三维张量矩阵,形状是(2,2,1),具体表示即为
[[[1],
[4]],
[[3],
[4]]]
可以想象成是一个2层,2行1列的积木堆在一起
其中的…代表的矩阵的维度缺省,如果是二维矩阵可以相当于:,三维相当于::
dddd
np.set_printoptions(threshold=np.inf) 解决数组显示不全

保存数组中间变量list_img_size到本地:
需要import joblib

val_size = np.array(list_img_size)
joblib.dump(val_size,'val_size')
B=joblib.load('val_size')
<think>好的,我现在需要帮助用户总结Numpy数组的索引和运算方法,并分享实验经验。首先,我需要回顾用户提供的引用内容,确保信息准确。根据引用[1],Numpy数组的索引分为整数索引、切片索引和布尔索引,特别是二维数组的用法需要详细说明。引用[2]和[3]提到数组的四则运算和基本操作,而引用[4]则涉及条件判断和求和。 首先,我应该分索引和运算两部分来组织内容。索引部分需要涵盖一维和二维数组的不同方法,例如单个元素访问、切片、布尔索引,并结合示例代码。运算部分包括基本四则运算、矩阵乘法、统计函数以及条件统计,如sum的使用。 接下来,实验经验总结要实用,比如强调维度一致、视图与副本的区别、布尔索引的应用场景,以及利用向量化提升性能。需要注意用户可能遇到的常见问题,比如索引越界或运算维度不匹配,给出相应的解决建议。 同时,用户要求生成相关问题,我需要根据内容提出相关问题,比如索引方式对比、运算注意事项等。确保问题覆盖用户可能深入学习的点。 最后,检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,并且引用标识正确添加。确保语言口语化,结构清晰,分步骤讲解,让用户容易理解。</think>### Numpy数组索引与运算方法总结 #### 一、索引方法 1. **整数索引** 一维数组访问方式与Python列表相同,二维数组需指定行、列坐标: ```python arr = np.array([[1,2,3],[4,5,6]]) print(arr[1, 2]) # 输出6(第二行第三列元素)[^1] ``` 2. **切片索引** 支持步长控制和范围截取,二维数组切片需注意行列维度: ```python print(arr[0:2, 1:3]) # 输出[[2,3],[5,6]](前两行的第2-3列) ``` 3. **布尔索引** 通过条件表达式筛选数据,常用于数据清洗: ```python mask = arr > 3 print(arr[mask]) # 输出[4,5,6][^4] ``` #### 二、运算方法 1. **基本四则运算** 数组形状相同时自动按元素运算: $$ A + B = \begin{bmatrix}1+4 & 2+5 & 3+6 \\ 4+1 & 5+2 & 6+3\end{bmatrix} $$ [^2] 2. **矩阵乘法** 使用`@`运算符或`np.dot()`: ```python C = np.array([[1,2],[3,4]]) print(C @ C.T) # 输出[[5 11],[11 25]][^3] ``` 3. **统计函数** - `np.sum(arr)`:全局求和 - `np.mean(arr, axis=1)`:按行求均值 - `np.max(arr, axis=0)`:按列取最大值[^4] #### 三、实验经验总结 1. **维度对齐** 进行运算前需确保`arr.shape`匹配,否则触发广播机制或报错 2. **视图与副本** 切片操作默认生成视图(原始数组引用),需用`arr.copy()`显式创建副本 3. **布尔索引优化** 结合`np.logical_and/or`处理复合条件,比循环判断快10倍以上 4. **向量化运算** 避免Python循环,优先使用`np.vectorize()`或内置函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值