Numpy的ndarray数组有哪些基础操作和特性?

2026-04-17 23:411阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1957个文字,预计阅读时间需要8分钟。

Numpy的ndarray数组有哪些基础操作和特性?

NumPy的核心特性是其N维数组对象ndarray,它是一个支持多种类型数据集合,以0为起始索引的数组。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列**同类型数据**的集合,**以 0 下标为开始**进行集合中元素的索引。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

1.数组的属性

In [ ]:

import numpy as np a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)

#数组元素总数 a.size

Out[ ]:

6

In [ ]:

# 数组的形状,多少行多少列 a.shape

Out[ ]:

(2, 3)

In [ ]:

# 数组的维数 a.ndim

Out[ ]:

2

In [ ]:

# 数组中元素类型 a.dtype

Out[ ]:

dtype('float32')

In [ ]:

# 更改数组元素类型 a=np.array([1,2,3],dtype=np.int8) a.dtype

Out[ ]:

dtype('int8') 2.改变形状

改变数组的形状,这个经常会用到

In [ ]:

# 修改数组形状 a.reshape(3,2)

Out[ ]:

array([[1., 2.], [3., 1.], [2., 4.]], dtype=float32) 3.生成特殊数组

顺序数组,等差数组,等比数组,全零数组,全一数组,对角数组

In [ ]:

# 生成从0-9的十个数字 list(range(10))

Out[ ]:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [ ]:

np.arange(10)

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#创建等差数组 np.linspace(0,10,10)

Out[ ]:

array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])

In [ ]:

# 创建不包含结尾数字的等差数组 np.linspace(0,10,10,endpoint=False)

Out[ ]:

array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

In [ ]:

# 创建等比数列 np.logspace(0,10,10,endpoint=False,base=2)

Out[ ]:

array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])

In [ ]:

2**np.linspace(0,10,10,endpoint=False)

Out[ ]:

array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])

In [ ]:

# 生成全0数组 np.zeros(2)

Out[ ]:

array([0., 0.])

In [ ]:

# 生成两行三列的全0数组 np.zeros((2,3))

Out[ ]:

array([[0., 0., 0.], [0., 0., 0.]])

In [ ]:

# 生成3阶单位数组 np.eye(3)

Out[ ]:

array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])

In [ ]:

# 生成元素值全为1的数组 np.ones(2)

Out[ ]:

array([1., 1.])

In [ ]:

# 生成元素值全为1的数组 np.ones((2,3))

Out[ ]:

array([[1., 1., 1.], [1., 1., 1.]])

In [ ]:

#生成指定对角线元素值的数组 np.diag([1,3,7])

Out[ ]:

Numpy的ndarray数组有哪些基础操作和特性?

array([[1, 0, 0], [0, 3, 0], [0, 0, 7]]) 4.生成随机数数组

In [ ]:

# 生成4个随机数 np.random.random(size=4)

Out[ ]:

array([0.99380006, 0.58109084, 0.42882938, 0.07277003])

In [ ]:

# 生成随机数数组 np.random.random(size=(2,3))

Out[ ]:

array([[0.34564092, 0.45134545, 0.38735849], [0.38139285, 0.91636466, 0.85725663]])

In [ ]:

# 生成4个均匀分布的随机数 np.random.rand(2,3,2)

Out[ ]:

array([[[0.05311698, 0.76746714], [0.85221954, 0.89683859], [0.16683139, 0.9991075 ]], [[0.43788693, 0.8984444 ], [0.86345445, 0.74366691], [0.02199102, 0.95883056]]])

In [ ]:

# 生成正态分布的随机数 np.random.randn(2,3,2)

Out[ ]:

array([[[ 0.3403313 , 0.62020657], [ 2.2423117 , -0.05473819], [-0.07679334, -0.01406795]], [[ 1.62656454, 0.68541225], [-0.42121934, 0.09347002], [-0.30088079, -0.08401791]]])

In [ ]:

# 随机生成0-10之间的2行3列随机数 np.random.randint(0,10,size=(2,3))

Out[ ]:

array([[7, 5, 6], [8, 3, 6]]) 5.索引与切片

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

In [ ]:

# 一维数组的索引 a=np.arange(10) a

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

# 数组的第三个值 a[2]

Out[ ]:

2

In [ ]:

#数组从第三个值之后的值 a[2:]

Out[ ]:

array([2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#数组第六个值之前的值 a[:5]

Out[ ]:

array([0, 1, 2, 3, 4])

In [ ]:

#数组从第二个值到最后一个值 a[1:-1]

Out[ ]:

array([1, 2, 3, 4, 5, 6, 7, 8])

In [ ]:

#数组从第二个值到最后一个值,其间步长为2 a[1:-1:2]

Out[ ]:

array([1, 3, 5, 7])

In [ ]:

# 多维数组的索引 b=np.random.randint(0,10,size=(2,3)) b

Out[ ]:

array([[0, 3, 6], [2, 8, 0]])

In [ ]:

# 输出第二行所有元素 b[1,:]

Out[ ]:

array([2, 8, 0])

In [ ]:

#输出第一列所有元素 b[:,0]

Out[ ]:

array([0, 2])

In [ ]:

#??? b[:,::2]

Out[ ]:

array([[0, 6], [2, 0]]) 6.展开

Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状,翻转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除

In [ ]:

# 展开多维数组变为一维数组 b.ravel()

Out[ ]:

array([0, 3, 6, 2, 8, 0]) 7.拼接

In [ ]:

#拼接数组 a=np.arange(10).reshape(2,5) b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)

In [ ]:

#横向拼接法一 np.vstack((a,b)) #横向拼接法二 np.concatenate((a,b),axis=0)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. ], [5. , 6. , 7. , 8. , 9. ], [0. , 0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

#纵向拼接法一 np.vstack((a,b)) #纵向拼接法二 np.concatenate((a,b),axis=1)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. , 0. , 0.1, 0.2, 0.3, 0.4], [5. , 6. , 7. , 8. , 9. , 0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

a=np.arange(36).reshape(6,6) a

Out[ ]:

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], [30, 31, 32, 33, 34, 35]]) 8.分割

In [ ]:

#横向分割数组法一 np.hsplit(a,3) #横向分割数组法二 np.split(a,3,axis=1)

Out[ ]:

[array([[ 0, 1], [ 6, 7], [12, 13], [18, 19], [24, 25], [30, 31]]), array([[ 2, 3], [ 8, 9], [14, 15], [20, 21], [26, 27], [32, 33]]), array([[ 4, 5], [10, 11], [16, 17], [22, 23], [28, 29], [34, 35]])]

In [ ]:

#纵向分割数组法一 np.vsplit(a,3) #横向分割数组法二 np.split(a,3,axis=0)

Out[ ]:

[array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]), array([[24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35]])] 9.参考文章

菜鸟教程-Numpy

本文共计1957个文字,预计阅读时间需要8分钟。

Numpy的ndarray数组有哪些基础操作和特性?

NumPy的核心特性是其N维数组对象ndarray,它是一个支持多种类型数据集合,以0为起始索引的数组。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列**同类型数据**的集合,**以 0 下标为开始**进行集合中元素的索引。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

1.数组的属性

In [ ]:

import numpy as np a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)

#数组元素总数 a.size

Out[ ]:

6

In [ ]:

# 数组的形状,多少行多少列 a.shape

Out[ ]:

(2, 3)

In [ ]:

# 数组的维数 a.ndim

Out[ ]:

2

In [ ]:

# 数组中元素类型 a.dtype

Out[ ]:

dtype('float32')

In [ ]:

# 更改数组元素类型 a=np.array([1,2,3],dtype=np.int8) a.dtype

Out[ ]:

dtype('int8') 2.改变形状

改变数组的形状,这个经常会用到

In [ ]:

# 修改数组形状 a.reshape(3,2)

Out[ ]:

array([[1., 2.], [3., 1.], [2., 4.]], dtype=float32) 3.生成特殊数组

顺序数组,等差数组,等比数组,全零数组,全一数组,对角数组

In [ ]:

# 生成从0-9的十个数字 list(range(10))

Out[ ]:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [ ]:

np.arange(10)

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#创建等差数组 np.linspace(0,10,10)

Out[ ]:

array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])

In [ ]:

# 创建不包含结尾数字的等差数组 np.linspace(0,10,10,endpoint=False)

Out[ ]:

array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

In [ ]:

# 创建等比数列 np.logspace(0,10,10,endpoint=False,base=2)

Out[ ]:

array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])

In [ ]:

2**np.linspace(0,10,10,endpoint=False)

Out[ ]:

array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])

In [ ]:

# 生成全0数组 np.zeros(2)

Out[ ]:

array([0., 0.])

In [ ]:

# 生成两行三列的全0数组 np.zeros((2,3))

Out[ ]:

array([[0., 0., 0.], [0., 0., 0.]])

In [ ]:

# 生成3阶单位数组 np.eye(3)

Out[ ]:

array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])

In [ ]:

# 生成元素值全为1的数组 np.ones(2)

Out[ ]:

array([1., 1.])

In [ ]:

# 生成元素值全为1的数组 np.ones((2,3))

Out[ ]:

array([[1., 1., 1.], [1., 1., 1.]])

In [ ]:

#生成指定对角线元素值的数组 np.diag([1,3,7])

Out[ ]:

Numpy的ndarray数组有哪些基础操作和特性?

array([[1, 0, 0], [0, 3, 0], [0, 0, 7]]) 4.生成随机数数组

In [ ]:

# 生成4个随机数 np.random.random(size=4)

Out[ ]:

array([0.99380006, 0.58109084, 0.42882938, 0.07277003])

In [ ]:

# 生成随机数数组 np.random.random(size=(2,3))

Out[ ]:

array([[0.34564092, 0.45134545, 0.38735849], [0.38139285, 0.91636466, 0.85725663]])

In [ ]:

# 生成4个均匀分布的随机数 np.random.rand(2,3,2)

Out[ ]:

array([[[0.05311698, 0.76746714], [0.85221954, 0.89683859], [0.16683139, 0.9991075 ]], [[0.43788693, 0.8984444 ], [0.86345445, 0.74366691], [0.02199102, 0.95883056]]])

In [ ]:

# 生成正态分布的随机数 np.random.randn(2,3,2)

Out[ ]:

array([[[ 0.3403313 , 0.62020657], [ 2.2423117 , -0.05473819], [-0.07679334, -0.01406795]], [[ 1.62656454, 0.68541225], [-0.42121934, 0.09347002], [-0.30088079, -0.08401791]]])

In [ ]:

# 随机生成0-10之间的2行3列随机数 np.random.randint(0,10,size=(2,3))

Out[ ]:

array([[7, 5, 6], [8, 3, 6]]) 5.索引与切片

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

In [ ]:

# 一维数组的索引 a=np.arange(10) a

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

# 数组的第三个值 a[2]

Out[ ]:

2

In [ ]:

#数组从第三个值之后的值 a[2:]

Out[ ]:

array([2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#数组第六个值之前的值 a[:5]

Out[ ]:

array([0, 1, 2, 3, 4])

In [ ]:

#数组从第二个值到最后一个值 a[1:-1]

Out[ ]:

array([1, 2, 3, 4, 5, 6, 7, 8])

In [ ]:

#数组从第二个值到最后一个值,其间步长为2 a[1:-1:2]

Out[ ]:

array([1, 3, 5, 7])

In [ ]:

# 多维数组的索引 b=np.random.randint(0,10,size=(2,3)) b

Out[ ]:

array([[0, 3, 6], [2, 8, 0]])

In [ ]:

# 输出第二行所有元素 b[1,:]

Out[ ]:

array([2, 8, 0])

In [ ]:

#输出第一列所有元素 b[:,0]

Out[ ]:

array([0, 2])

In [ ]:

#??? b[:,::2]

Out[ ]:

array([[0, 6], [2, 0]]) 6.展开

Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状,翻转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除

In [ ]:

# 展开多维数组变为一维数组 b.ravel()

Out[ ]:

array([0, 3, 6, 2, 8, 0]) 7.拼接

In [ ]:

#拼接数组 a=np.arange(10).reshape(2,5) b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)

In [ ]:

#横向拼接法一 np.vstack((a,b)) #横向拼接法二 np.concatenate((a,b),axis=0)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. ], [5. , 6. , 7. , 8. , 9. ], [0. , 0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

#纵向拼接法一 np.vstack((a,b)) #纵向拼接法二 np.concatenate((a,b),axis=1)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. , 0. , 0.1, 0.2, 0.3, 0.4], [5. , 6. , 7. , 8. , 9. , 0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

a=np.arange(36).reshape(6,6) a

Out[ ]:

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], [30, 31, 32, 33, 34, 35]]) 8.分割

In [ ]:

#横向分割数组法一 np.hsplit(a,3) #横向分割数组法二 np.split(a,3,axis=1)

Out[ ]:

[array([[ 0, 1], [ 6, 7], [12, 13], [18, 19], [24, 25], [30, 31]]), array([[ 2, 3], [ 8, 9], [14, 15], [20, 21], [26, 27], [32, 33]]), array([[ 4, 5], [10, 11], [16, 17], [22, 23], [28, 29], [34, 35]])]

In [ ]:

#纵向分割数组法一 np.vsplit(a,3) #横向分割数组法二 np.split(a,3,axis=0)

Out[ ]:

[array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]), array([[24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35]])] 9.参考文章

菜鸟教程-Numpy