numpy数组和传统数组,numpy数组用法
Python中的数据操作几乎等同于NumPy数组操作,甚至新的熊猫工具也是建立在NumPy数组的基础上。
数组的属性决定了数组的大小、形状、存储大小和数据类型。
数组的索引获取并设置数组中每个元素的值。
获取或设置大数组中较小的子数组。
数组的变形会改变给定数组的形状。
拼接拆分数组将多个数组合二为一,将一个数组拆分成多个。
目录
数组索引:获取单个元素
数组切片:获取子数组
阵列变形:
阵列拼接和拆分:
NumPy数组的属性
每个数组都有nidm(数组的维度)、shape(数组的每个维度的大小)和size(数组的总大小)属性、dtype(数组的数据类型)、itemsize(每个数组元素的字节大小)、nbytes(表示数
总组字节大小的属性) (
总的来说,可以认为
nbytes
项目大小
大小
的乘积大小相等。):
设置一个随机种子
# print (np.random.randint (10,size=6)) #一维数组
# print (np.random.randint (10,size=(3,4)) # 2D数组
Array _ 3=np.random.randint (10,size=(3,4,5)) # 3D数组
Print(数组的数据类型,array _ 3 . dtype );维度 array _ 3;ndim,;数组“array_3.shape”的每个维度的大小;数组 array_3.size 的总大小
Print(数组的总字节大小,array_3.nbytes,;每个数组元素的字节大小,array_3.itemsize)
# nbytes=itemsize*size
打印运行结果(array_3):
数组的数据类型int32数组维数3;数组(3,4,5)的每个维度的大小;阵列60的总大小
总数组字节大小240;每个数组元素的字节大小是4
[[[5 0 3 3 7]
[9 3 5 2 4]
[7 6 8 8 1]
[6 7 7 8 1]]
[[5 9 8 9 4]
[3 0 3 5 0]
[2 3 8 1 3]
[3 3 7 0 1]]
[[9 9 0 4 7]
[3 2 7 2 0]
[0 4 5 5 6]
[8 4 1 4 9]]]
进程结束,退出代码为0
数组索引:获取单个元素
在一维数组中:(和Python list一样,在一维数组中,也可以通过括号指定索引来获得第I个值(从0开始计数):)
array_1=np.array([1,2,3,4,5,6])
Print(array_1[0])运行结果:
一个
在以退出代码0结束的流程的多维数组中:(通过逗号分隔的索引元组获取元素:)
Array _ 3=np.random.randint (10,size=(3,4,5)) # 3D数组
Print(array_3[0][0][-1])运行结果:
七
以退出代码0结束的进程根据索引修改元素值:
Array_3[0][0][-1]=8 #根据索引修改元素值
Print(array_3[0][0][-1])运行结果:
八
进程结束,退出代码为0数组切片:获取子数组
就像我们之前使用括号获得单个数组元素一样,我们也可以获得带有切片符号的子数组,切片符号使用冒号(
)的意思是。
NumPy
切片语法和
计算机编程语言
表具有相同的标准切片语法。来获取数组
的一个片段,可以通过以下方式使用:
x[开始:停止:步进]
如果以上3
参数未指定,则它们将分别设置为默认值。
开始=0
、停止=
尺寸的大小(
尺寸大小
步骤=1。我们会详细介绍。
如何在一维和多维数组中得到子数组?
一维子阵列:
#一维子阵列
array_1=np.arange(1,11)
打印(数组_1)
Print(array_1[:5]) #获取前5个元素
Print(array_1[5:]) #获取索引5之后的元素
Print(array_1[:2]) #每隔一个元素
Print(array_1[5:2]) #从索引5开始,每隔一个元素打印一次
Print(array_1[:-1]) #以相反的顺序输出所有元素
Print(array_1[5:-2]) #从索引5开始,以相反的顺序每隔一个元素打印一次
Print(array_1[:5:-2]) #以相反的顺序每隔一个元素,运行结果直到索引5:
[ 1 2 3 4 5 6 7 8 9 10]
[1 2 3 4 5]
[ 6 7 8 9 10]
[1 3 5 7 9]
[ 6 8 10]
[10 9 8 7 6 5 4 3 2 1]
[6 4 2]
[10 8]
进程结束,退出代码为0多维子数组:
#多维子阵列
Array _ 3=np.random.randint (10,size=(3,4,5)) # 3D数组
打印(数组_3)
打印(-)
Print(array_3[:2,2]) #取前两个子数组的前两行
打印(-)
Print(array_3[:0]) #每个子数组的第一行
打印(-)
Print(array_3[0,)#索引为0的数组的所有内容运行结果:
[[[5 0 3 3 7]
[9 3 5 2 4]
[7 6 8 8 1]
[6 7 7 8 1]]
[[5 9 8 9 4]
[3 0 3 5 0]
[2 3 8 1 3]
[3 3 7 0 1]]
[[9 9 0 4 7]
[3 2 7 2 0]
[0 4 5 5 6]
[8 4 1 4 9]]]
-
[[[5 0 3 3 7]
[9 3 5 2 4]]
[[5 9 8 9 4]
[3 0 3 5 0]]]
-
[[5 0 3 3 7]
[5 9 8 9 4]
[9 9 0 4 7]]
-
[[5 0 3 3 7]
[9 3 5 2 4]
[7 6 8 8 1]
[6 7 7 8 1]]
流程转换已完成,退出代码为0数组:
数组变形最灵活的实现是通过reshape()
要实现的函数。
如果这种方法可行,那么原始数组的大小必须与变形后的数组的大小相同。
大小是一样的。如果满足这个条件,
使再成形
方法将使用原始数组之一。
非重复视图。然而,现实情况是,在不连续数据缓存的情况下,通常不可能返回非副本视图。
另一种常见的变形模式是将一维数组转换为行或列的二维矩阵。您也可以使用reshape方法,或者简单地在切片操作中使用它。
纽axis
关键词:
代码重复:
#将数字1~12放入一个43的矩阵中
grid=np.arange(1,13)。整形((4,3))
打印(网格)
打印(-获取行向量)
print(grid[np.newaxis,2:])
打印(-获取列向量)
打印(grid[:np.newaxis,1])运行结果:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
-得到线向量
[[[ 7 8 9]
[10 11 12]]]
-获取列向量
[[[ 1]]
[[ 4]]
[[ 7]]
[[10]]]
进程结束,退出代码为0
阵列拼接和拆分:
以上操作都是针对单个数组的,但有时需要将多个数组合并成一个或者将一个数组拆分成多个。接下来将详细描述这些操作。
阵列拼接:
拼接或连接
NumPy
中的两个数组主要由
连接
np.vstack
np.hstack
现在。
代码重复:
#一次拼接三个一维数组
x=np.array([1,2,3])
y=np.array([3,2,1])
z=np.array([4,5,6])
print(np.concatenate([x,y,z])
#拼接二维数组
打印(“拼接二维数组”)
grid=np.array([[1,2,3],[4,5,6]])
print(NP . concatenate([网格,网格,网格])
print(np.concatenate([grid,grid,grid],axis=1))
#垂直堆栈阵列
打印(“垂直堆栈数组”)
x=np.array([1,2,3])
grid=np.array([[1,2,3],[4,5,6]])
print(np.vstack([x,grid])
#水平堆栈阵列
打印(“水平堆栈数组”)
x=np.array([[4],[7]])
grid=np.array([[1,2,3],[4,5,6]])
print(np.hstack([grid,x])
# dstack沿第三维拼接数组
打印(“沿第三维拼接数组”)
a=np.array((1,2,3))
b=np.array((2,3,4))
print(np.dstack((a,b)))
打印(“沿第三维拼接数组”)
a=np.array([[1],[2],[3]])
b=np.array([[2],[3],[4]])
Print(np.dstack((a,b))运行结果:
[1 2 3 3 2 1 4 5 6]
二维数组
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
[[1 2 3 1 2 3 1 2 3]
[4 5 6 4 5 6 4 5 6]]
垂直堆叠阵列
[[1 2 3]
[1 2 3]
[4 5 6]]
水平堆叠阵列
[[1 2 3 4]
[4 5 6 7]]
沿着第三维拼接阵列
[[[1 2]
[2 3]
[3 4]]]
沿着第三维拼接阵列
[[[1 2]]
[[2 3]]
[[3 4]]]
进程的拆分以退出代码0数组结束:
拼接的相反过程是分裂。分裂可以通过np.split实现。
Np.hsplit和
np.vsplit函数。您可以将一个索引列表作为参数传递给上面的函数。索引列表记录了分割点的位置:
代码重复:
#数组的拆分
x=[1,2,3,99,99,3,2,1]
x1,x2,x3=np.split(x,[3,5])
打印运行结果(x1,x2,x3):
[1 2 3] [99 99] [3 2 1]
进程结束,退出代码为0
值得注意的是n
分割点将会得到
一个
子阵列。相关的np.hsplit
np.vsplit的用法类似,np.dsplit。
沿第三维拆分数组。
grid=np.arange(16)。整形((4,4))
打印(网格)
打印( vsplit -)
upper,lower=np.vsplit(grid,[2])
打印(上)
打印(下方)
打印( hsplit -)
left,right=np.hsplit(grid,[2])
打印(左)
打印(右)
打印( dsplit -)
x=np.arange(16).整形(2,2,4)
打印(十)
print(np.dsplit(x,2))运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
vsplit -
[[0 1 2 3]
[4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]
hsplit -
[[ 0 1]
[ 4 5]
[ 8 9]
[12 13]]
[[ 2 3]
[ 6 7]
[10 11]
[14 15]]
数字拆分-
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
[数组([[[ 0,1],
[ 4, 5]],
[[ 8, 9],
[12,13]]]),数组([[[ 2,3],
[ 6, 7]],
[[10, 11],
[14, 15]]])]
进程结束,退出代码为0
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。