NumPy ndarray
NumPy中最重要的类是ndarray,ndarray是存储单一数据类型的多维数组。
可以使用索引(从0开始)访问ndarray对象中的元素。
ndarray的内存结构
标准的Python列表(list)中,元素是对象。如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费资源。
与此不同,ndarray中元素直接存储为原始数据,元素的类型由ndarray对象中的属性dtype描述。
当ndarray数组中的元素,通过索引或切片返回时,会根据dtype,从原始数据转换成Python对象,以便外部使用。
上图中,ndarray头部信息中的dtype描述了数组元素的数据类型,元素保存为原始数据(二进制数据),从数组中取出后,将根据dtype转换为相应的python对象。
创建Ndarray对象
要创建ndarray对象,可以使用numpy模块中的array
构造函数。为此,首先需要导入numpy模块。
>>> a = numpy.array
复制
示例
[root@qikegu py3]# python
Python 3.7.3 (default, Jun 17 2019, 22:07:41)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> a = numpy.array
>>> print(a)
<built-in function array>
复制
可以将集合对象传递给array
函数,用于创建与集合对象内容相同的n维数组。语法如下所示:
>>> numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
复制
下表是参数说明:
序号 | 参数 | 描述 |
---|---|---|
1 | object | 表示集合对象,可以是列表、元组、字典、集合等等。 |
2 | dtype | 可选。可以通过此项参数更改数组元素的类型,默认值是none,表示保持原集合对象中的类型。 |
3 | copy | 可选参数。默认是true,表明复制对象。 |
4 | order | {‘K’, ‘A’, ‘C’, ‘F’}, 可选参数。指定数组的内存布局,可以是C语言顺序(行)或Fortan语言顺序(列)。详情可参考官方文档。
|
5 | subok | 布尔量,可选参数。默认false,表示须返回基类数组;如果设置为true,表示可以返回子类。 |
6 | ndmin | 整型,可选。指定返回数组的最小维数。 |
要使用Python列表创建ndarray数组,使用以下语句:
a = numpy.array([1, 2, 3])
复制
示例
>>> a = numpy.array([1,2,3])
>>> print(a)
[1 2 3]
复制
要创建多维数组,可使用以下语句。
a = numpy.array([[1, 2, 3], [4, 5, 6]])
复制
示例
>>> a = numpy.array([[1, 2, 3], [4, 5, 6]])
>>> print(a)
[[1 2 3]
[4 5 6]]
复制
要指定数组元素的数据类型,可以传入dtype
参数。
a = numpy.array([1, 3, 5, 7], complex)
复制
示例
指定数组元素为复数类型:
>>> a = numpy.array([1, 3, 5, 7], complex)
>>> print(a)
[1.+0.j 3.+0.j 5.+0.j 7.+0.j]
复制
获取数组的维数
ndarray.ndim
属性可以用来获取数组的维数。
示例
>>> arr = numpy.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]])
>>> print(arr.ndim)
2
复制
获取数组元素的大小
ndarray.itemsize
属性用于获取数组元素的大小,该函数返回数组元素的字节数。
示例
#获取数组元素的大小
import numpy as np
a = np.array([[1,2,3]])
print("数组元素大小:", a.itemsize, "字节")
复制
输出
数组元素大小: 8 字节
复制
获取数组元素的数据类型
要检查数组元素的数据类型,可以使用ndarray.dtype
属性。
示例
#检查数组元素的数据类型
import numpy as np
a = np.array([[1,2,3]])
print("数据元素的数据类型是:", a.dtype)
复制
输出
数据元素的数据类型是: int64
复制
获取数组的形状和大小
要获得数组的形状和大小,可以使用ndarray.size
与ndarray.shape
属性。
数组形状是指数组的行数和列数,如一个二维数组的形状是:2(行)x 3(列)
示例
import numpy as np
a = np.array([[1,2,3,4,5,6,7]])
print("大小:",a.size)
print("形状:",a.shape)
复制
输出
大小: 7
形状: (1, 7)
复制
重构数组对象
数组的形状指的是多维数组的行数和列数。numpy中,可以改变数组的形状,即数组的行列排布。
ndarray.reshape()
函数可用于重构数组。该函数接受新形状的行、列两个参数。
例如,如下图所示,可以把3×2的数组改为2×3的数组。
示例
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
print("原数组:")
print(a)
a=a.reshape(2,3)
print("改变后:")
print(a)
复制
输出
原数组:
[[1 2]
[3 4]
[5 6]]
改变后:
[[1 2 3]
[4 5 6]]
复制
数组切片
NumPy中,数组切片可以从数组中提取指定范围的数组元素。NumPy中的数组切片方法与python中的列表切片方法类似。
切片语法
arr_name[start: end: step]
复制
[:]
表示复制源列表- 负的index表示,从后往前。-1表示最后一个元素。
>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> print(a[:5])
[1 2 3 4 5]
>>> print(a[1:5:2])
[2 4]
复制
关于数组切片,后续章节将有详细介绍。
linspace
linspace()
函数的作用是: 返回给定区间内均匀分布的值。下面的示例,在给定的区间5-15内返回10个均匀分布的值
示例
import numpy as np
a=np.linspace(5,15,10) #打印10个值,这些值在给定的区间5-15上均匀地分布
print(a)
复制
输出
[ 5. 6.11111111 7.22222222 8.33333333 9.44444444 10.55555556
11.66666667 12.77777778 13.88888889 15. ]
复制
获取数组元素中的最大值、最小值以及元素的和
ndarray.max()
、ndarray.min()
和ndarray.sum()
函数,分别用于获取数组元素中的最大值、最小值以及元素和。
示例
import numpy as np
a = np.array([1,2,3,10,15,4])
print("数组:",a)
print("最大值:",a.max())
print("最小值:",a.min())
print("元素总和:",a.sum())
复制
输出
数组: [ 1 2 3 10 15 4]
最大值: 15
最小值: 1
元素总和: 35
复制
NumPy数组轴
NumPy多维数组由轴表示,其中axis-0表示列,axis-1表示行。我们可以通过轴对列或行进行计算。例如,求某行元素的和。
示例
计算每一列中的最大元素、每一行中的最小元素,以及每一行的和:
import numpy as np
a = np.array([[1,2,30],[10,15,4]])
print("数组:",a)
print("每列的最大元素:",a.max(axis = 0))
print("每行的最小元素:",a.min(axis = 1))
print("每行的和:",a.sum(axis = 1))
复制
输出
数组: [[ 1 2 30]
[10 15 4]]
每列的最大元素: [10 15 30]
每行的最小元素: [1 4]
每行的和: [33 29]
复制
求平方根和标准差
NumPy中,sqrt()
和std()
函数分别求数组元素的平方根和标准差。
标准差表示数组的每个元素与numpy数组的平均值之间的差异。
示例
import numpy as np
a = np.array([[1,2,30],[10,15,4]])
print(np.sqrt(a))
print(np.std(a))
复制
输出
[[1. 1.41421356 5.47722558]
[3.16227766 3.87298335 2. ]]
10.044346115546242
复制
数组间的算术运算
numpy中,多维数组间可以直接进行算术运算。
在下面的示例中,对两个多维数组a和b执行算术运算。
示例
import numpy as np
a = np.array([[1,2,30],[10,15,4]])
b = np.array([[1,2,3],[12, 19, 29]])
print("a+b\n",a+b)
print("axb\n",a*b)
print("a/b\n",a/b)
复制
输出
a+b
[[ 2 4 33]
[22 34 33]]
axb
[[ 1 4 90]
[120 285 116]]
a/b
[[ 1. 1. 10. ]
[ 0.83333333 0.78947368 0.13793103]]
复制
数组拼接
numpy中,可以垂直或水平拼接2个数组。
示例
import numpy as np
a = np.array([[1,2,30],[10,15,4]])
b = np.array([[1,2,3],[12, 19, 29]])
print("垂直拼接\n",np.vstack((a,b)));
print("水平拼接\n",np.hstack((a,b)))
复制
输出
垂直拼接
[[ 1 2 30]
[10 15 4]
[ 1 2 3]
[12 19 29]]
水平拼接
[[ 1 2 30 1 2 3]
[10 15 4 12 19 29]]
复制
Doc navigation
- Numpy 介绍
- Numpy 安装
- NumPy ndarray
- NumPy 数据类型
- NumPy 数组创建
- NumPy 基于已有数据创建数组
- NumPy 基于数值区间创建数组
- NumPy 数组切片
- NumPy 广播
- NumPy 数组迭代
- NumPy 位运算
- NumPy 字符串函数
- NumPy 数学函数
- NumPy 统计函数
- NumPy 排序、查找、计数
- NumPy 副本和视图
- NumPy 矩阵库函数
- NumPy 线性代数
相关推荐