1.2 提取单个元素

array的位置从左侧数从0开始算的,第一个元素的位置是0,第二个元素的位置是1;从右侧数是从-1开始算的,最后一个元素的位置是-1,导数第二个元素的位置是-2,以此类推。两种方式都可以指定某个元素的位置。

# 提取第一个元素
print(a[0]) 
# 提取最后一个元素
print(a[-1]) 

1.3 提取范围元素

提取范围元素时,范围的下限位置处的元素将被提取,范围上限位置的元素将不被提取,如a[1:4] 将提取a[1],a[2],a[3] 构成的数组,而不考虑a[4]。对于包含端点的情况,包含左端点则可使用a[:2] 的形式,包含又端点则使用a[2:]的形式。a[:]代表提取所有元素。

# 提取连续范围 第0~2 个元素
print(a[:3]) 
#>>>[1 2 3]
# 提取第3个以后的元素(包括第3个元素)
print(a[3:]) 
#>>>[4 5]
# 提取所有元素
print(a[:])
#>>>[1 2 3 4 5]

1.4 提取多个不连续元素(非常有用)

可通过np.take() 提取多个不连续的元素,对于一维数组来说,较为简单,不用指定维度。方法类似提取单个元素,

# 提取任意不连续的元素
print(a.take([1,3,4])) 
#>>>[2 4 5]

2.行向量和列向量切片

2.1行向量提取单个元素

与一维数组类似,当取出单个元素时,np.array中最后一位的位置是9,位置-1也可以代表最后一个位置,使用位置9或者位置-1都能取出最后一个橼属。与数组不同的是行矢量是二维,提取某个参数时需要指定元素在两个维度下的位置如 a[0,0]代表两个维度中位置都为0的元素。

import numpy as np
a=np.arange(10).reshape(1,-1)
print(a) # 打印出a
#>>> a = [[0 1 2 3 4 5 6 7 8 9]]
print(a[0,-1]) # 打印最后一个数,方法1
print(a[0,9]) # 打印最后一个数,方法2

当进行范围切片时,np.array的特性是包含初始位置而不包含结尾位置。-1代表的是最后一个位置,若从某个范围到-1进行范围取值,得到的结果将不包含最后一个元素。

print(a[:6,0]) # 打印范围时,不包括(:6)末尾的边界6位置
>>> a[:6,0] = [0 1 2 3 4 5]
print(a[:-1,0]) # 打印范围时,不包括(:-1)末尾的边界-1位置
>>> a[:-1,0] = [0 1 2 3 4 5 6 7 8]

若想包含最后一个元素则需要使用“x:”的形式,意义为取出从位置x到最后一个位置范围内的元素。当使用“:”时将取出当前坐标轴下所有位置的元素。

2.2 行向量提取范围切片

需要特别注意的是:对二维数组(或更高维数组)进行切片时,若某个维度只通过一个整数指定了一个位置,则得到的是一维数据。此时只能通过reshape函数将其重新转化为二维(或更高维数组),否则可能影响后续的计算。

print(a[1:,0]) # 打印行范围
>>> a[1:,0] = [1 2 3 4 5 6 7 8 9]
print(a[:,0]) # 打印所有行范围
>>> a[:,0] = [0 1 2 3 4 5 6 7 8 9]

解决该问题的方法是:将单个整数位置改为范围表达式(如: 位置1 = 位置范围1:2,所代表的位置信息相同,但a[:,1]将会得到一维数组,a[:,1:2]将会得到二维数组),可见使用范围表达式代表单个位置进行切片可以避免维度减少。

print(a[:4,:]) # 行向量切片后保持二维
>>>  [[0 1 2 3]]
print(a[:4,0:]) # 行向量切片后保持二维
>>>  [[0 1 2 3]]
print(a[:4,0:1]) # 行向量切片后保持二维
>>>  [[0 1 2 3]]

2.3 行矢量不连续切片

不连续切片时,只能使用np.take(),分别获取每个维度中某些位置的信息,得到的结果和原数据维度相同。

# 使用 np.take() 进行不连续切片
print(a.take([0],0)) 
#>>>[[1 3 4]]
print(a.take([0],0).take([1,3,4],1)) 
# .take([0],0) 获取维度0 的第一个位置
# .take([1,3,4],1) 获取维度1 的第1,3,4个位置
#>>>[[0 1 2 3 4 5 6 7 8 9]]

为简单明了地进行介绍,上述主要针对的是行向量,对于列向量的切片取出元素的方法也是类似的,在此不再赘述。

3 矩阵切片

矩阵的切片进行单元素提取与第2节相同,不再赘述。对于范围切片 进行介绍,上代码:生成2*5阶矩阵,进行切片操作,每个维度的切片位置方式与前面介绍的相同。但需要注意的是,某个维度只需要一个坐标位置下的元素时,最好将其表示为范围提取的形式,以避免数据降维。对于二维离散位置的切片提取,可采用np.take()完成相关操作。

import numpy as np
# 生成2维数组
a=np.arange(10).reshape(2,5)
print(a) # 打印出a
>>>[[0 1 2 3 4]
 [5 6 7 8 9]]
# 提取第一行,使用范围切片形式,结果仍为2维
print(a[0:1,:]) 
>>>[[0 1 2 3 4]]
# 提取第一行中的1,3,4三个位置元素组成的2维数组
print(a.take([0],0))
#>>>[[0 1 2 3 4]]
print(a.take([0],0).take([1,3,4],1))
#>>>[[1 3 4]]

总的来说,对于array数据进行切片应注意:1)切片时指定各个维度坐标时,无论位置数量是否为1,都应尽量采用范围表示的形式,以避免产生维度丢失影响后续的计算结果。2)对于不连续切片可采用np.take()函数进行切片,既可实现不连续切片也可以保持矩阵原有的维度。

[20, 21, 22, 23]]]) 多维数组a中有0~23的整数,共24个元素,是一个2×3×4的三维数组。我们可以形象地把它看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列。 (2) 我们 用过NumPY的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图: 而这个功能在Python标准库的List中是不支持的,在List中只能以一维方式来进行切片操作: 但有时候我只想用一下这个功能,但又不想引入NumPY。其实这时候我也是可以在Python中实现的。这时候,只需在一个类中实现__getitem__特殊方法: class Array: """实现__getitem__,支持序列获元素、Slice等特性""" def __init__(self, lst): self.__coll = lst def __repr__(self): """显示列表"" xarray是一个开源的Python库,提供了一种灵活且高效的数据结构,用于处理具有标签维度的多维数组(也称为数据集)。它在NumPy的基础上构建,与Pandas紧密集成,并且为科学计算和数据分析提供了丰富的功能。xarray是一款强大而灵活的多维数据处理工具,为科学计算和数据分析提供了丰富的功能和工具。它的标签导向操作、多维数据分析和与Pandas的集成使其成为处理多维数据集的理想选择。通过掌握xarray的用法和特点,用户可以更高效地处理、分析和可视化多维数据,从而加快数据科学工作的进展。 var arrLength = arr.push('1'); console.log(arrLength); // 1 arrLength = arr.push('2','3','4'); console.log(arrLength); // 4 console.log(arr); // ['1','2','3','4'] unshift: 向数组的开头添加 对于array,如2-D的array,如何指定元素array为3*10的shape s = array([[ 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]]) 想... * @param {Array} array The array to query * @returns {*} Returns the first element of `array` * @example * head([1, 2, 3]) * // =&g... 数组(Array)是一种数据结构,它能够存储一组相同类型的数据。在Python中,我们可以使用列表(List)或数组库NumPy(Numerical Python)来实现数组的功能。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。 生成 ndarray 数组后,如何读我们所需要的数据呢?在 NumPy 中,既可以获 ndarray 数组的单个元素,也可以获一组元素(也即切片),这与 Python 中的列表(list)和元组(tuple)非常类似。请看下面的代码:import numpy as npnp.random.seed(2019)nd1 = np.random.random([10])#获指定位置的数据, 获... np.arange(0, samplePerChannel) #python的二维数据表示要用二层括号来进行表示。 #如:产生一个2×3的全0矩阵,若是zeros(2,3)这种写法就会出现 TypeError: #data type not understood 这种错误; # 正确的写法是 zeros((2,3)) #读写csv np.loadtxt(f JavaScript 数组的索引是从0开始的,第一个元素的索引为0,最后一个元素的索引等于该数组的长度减1。在之前,我们一般使用方括号通过索引访问数组元素array[index],如果指定的索引是一个无效值,JavaScript 数组并不会报错,而是会返回 undefined。 在大多数情况下,方括号语法是通过正索引访问数组元素的好方法。但有时我们希望从末尾而不是从头开始访问元素。例如,访问数组的最后一个元素: 现在,数组提供了一个新的方法来访问数组元素Array.prototype.at()。 indexmethod"是一种常见的TypeError错误,通常出现在切片操作时。本文提供了一些解决方法,包括检查切片索引的数据类型、检查切片对象是否可切片、检查切片索引的范围以及检查切片操作的语法。通过正确地解决这个错误,我们可以更好地理解和应用Python中的切片操作,提高代码的效率和可靠性。场景:对于一个包含学生考试成绩的列表,我们想要获前三名的成绩。pythonCopy code# 定义学生考试成绩列表# 对成绩列表进行排序,从高到低# 获前三名的成绩# 打印前三名的成绩。   Python中一般获带有index或者columns名称行列的矩阵元素,一般都是用pandas中iloc处理的。有时候处理完之后还得转成numpy格式,过程就比较麻烦虽然就是.values的事情,为啥不能用pandas一步到位呢。下面介绍一下Pythonarray中指定元素的示例: # 设array为3*10的shape s = array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],