文章目录
- Python科学计算库NumPy(一):NumPy的ndarray对象及其属性
- NumPy的ndarray对象
- (1)创建ndarray对象
- (2)Numpy数组属性:ndarray对象属性
- ndarray.shape返回值的理解
- ndarray.itemsize和ndarray.size的理解
Python科学计算库NumPy(一):NumPy的ndarray对象及其属性
- Numpy(Numerical Python)是Python语言的一个第三方库。
- Numpy是一个运行速度非常快的数学库。
- 支持大量的维度数组与矩阵运算。NumPy提供多维数组对象,以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
- 此外也针对数组运算提供了大量的数学函数库。
NumPy的ndarray对象
- NumPy的核心是其N维数组对象:ndarray对象。ndarray是一系列同类型数据的集合,集合中元素的索引以0下标为开始。
- ndarray对象是用于存放同类型元素的多维数组。
- ndarray 中的每个元素在内存中都有相同存储大小的区域。
(1)创建ndarray对象
- 创建一个ndarray对象只需调用Numpy的array函数即可:
numpy.array(object[, dtype = None, copy = True, order = None, subok = False, ndmin = 0])
'''参数说明:
object:数组或嵌套的数列
dtype:数组元素的数据类型,可选
copy:对象是否需要复制,可选
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok:默认返回一个与基类类型一致的数组
ndmin:指定生成数组的最小维度
'''
注意:处理矩阵数据时,不要写list结构。应该吧所有的数据操作转化为Numpy底层,即ndarray结构
- array:即数组,是numpy的最底层结构
- 代码演示
调用Numpy的array函数创建一个ndarray对象
注意:进行数组计算时,一定要确保数组的shape值是相同的。
import numpy as np
array = np.array([1,2,3,4,5]) # 创建一个数组(ndarray对象)
print(array)
print(type(array))
'''输出结果:
[1 2 3 4 5]
<class 'numpy.ndarray'>
'''
array1 = array + 1
array2 = array + array1
array3 = array * array1
print('array:%s'% array)
print('array1:%s'% array1)
print('array2:%s'% array2)
print('array3:%s'% array3)
'''输出结果:
array:[1 2 3 4 5]
array1:[2 3 4 5 6]
array2:[ 3 5 7 9 11]
array3:[ 2 6 12 20 30]
'''
# array的索引
print(array[0])
print(array[3])
'''输出结果:
1
4
'''
- ndarray结构中,所有元素必须是同一类型,如果不是,则自动向下转换
import numpy as np
list_test1 = [1,2,3,4,5]
array_test1 = np.array(list_test1)
'''array_test1:
array([1, 2, 3, 4, 5])
'''
# float类型举例
list_test2 = [1,2,3,4,5.1]
array_test2 = np.array(list_test2)
'''array_test2:
array([1. , 2. , 3. , 4. , 5.1])
'''
# 字符串类型举例
list_test3 = [1,2,3,4,'5']
array_test3 = np.array(list_test3)
'''array_test3:
array(['1', '2', '3', '4', '5'], dtype='<U11')
'''
(2)Numpy数组属性:ndarray对象属性
- Numpy数组的维数为轶(rank),轶就是轴的数量,一维数组的轶为1,二维数组的轶为2,以此类推。
- Numpy的数组中比较重要的ndarray对象属性有:
属性 | 说明 |
ndarray.ndim | 返回数组的维数,等于轶 |
ndarray.shape | 数组的维数,返回一个元组。对于一个n行m列的矩阵,值为(n,m)。如果是三维数组,则返回的元组包含3个元素。 |
ndarray.reshape(n,m) | reshape函数用于调整数组的大小,其参数n、m分别表示数组的行和列 |
ndarray.size | 数组元素的个数,相当于ndarray.shape中n*m的值 |
ndarray.dtype | ndarray对象的元素类型 |
ndarray.itemise | 返回ndarray对象中每个元素的大小,以字节为单位(int8为1个字节,float64为8个字节:float64占用64bits,每个字节长度为8,64/8=8,占用8个字节。一个元素类型为complex32的数组item属性为4) |
ndarray.flags | ndarray对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
- 代码演示:
# 处理矩阵数据时,不要写list结构
list1 = [1,2,3,4,5]
print(list1.shape) # 会报错:'list' object has no attribute 'shape'
import numpy as np
array = np.array([1,2,3,4,5])
print(type(array))
print(array.shape)
'''输出结果:
<class 'numpy.ndarray'>
(5,)
'''
array1 = np.array([[1,2,3],[4,5,6]])
print(array1)
print(array1.shape)
'''输出结果:
[[1 2 3]
[4 5 6]]
(2, 3)
'''
ndarray.shape返回值的理解
- 数组为三维时,ndarray.shape的返回值:
import numpy as np
array1 = np.array([[[1,2,3],[4,5,6]],[[2,3,4],[5,6,7]]])
array2 = np.array([[[1,2]],[[3,4]],[[5,6]]])
print(array1)
print(array1.shape)
print(array2)
print(array2.shape)
'''输出结果:
[[[1 2 3]
[4 5 6]]
[[2 3 4]
[5 6 7]]]
(2, 2, 3)
[[[1 2]]
[[3 4]]
[[5 6]]]
(3, 1, 2)
'''
数组为三维时,ndarray.shape输出的(a,b,c)可以形象地理解为:这个数组共a页,每一页都有一个b行c列的二维数组,也就是a个b*c的二维数组构成了这个(a,b,c)的三维数组。(a,b,c)中a表示包含的二维数组的个数,(b,c)表示二维数组的形状,即b行c列。
ndarray.itemsize和ndarray.size的理解
- ndarray.itemsize和ndarray.size代码演示
import numpy as np
array1 = np.array([1,2,3,4,5])
print(array1.dtype)
print(array1.itemsize)
'''输出结果:
int32
4
'''
array2 = np.array([[1,2,3],[4,5,6]])
array3 = np.array([[[1,2,3],[4,5,6]],[[2,3,4],[5,6,7]]])
print(array1)
print(array1.shape)
print(array1.size)
print(array2)
print(array2.shape)
print(array2.size)
print(array3)
print(array3.shape)
print(array3.size)
'''输出结果:
[1 2 3 4 5]
(5,)
5
[[1 2 3]
[4 5 6]]
(2, 3)
6
[[[1 2 3]
[4 5 6]]
[[2 3 4]
[5 6 7]]]
(2, 2, 3)
12
'''
- 总结:ndarray.itemsize以字节的形式返回数组中每一个元素的大小(ndarray 中的每个元素在内存中都有相同存储大小的区域。)
- 一个元素类型为float64的数组,其itemsize属性值为6(float64 占用 64 个 bits,每个字节长度为 8bits,所以 64/8,占用 8 个字节)
- 一个元素类型为 complex32 的数组,其 itemsize 属性为 4
- 一个元素类型为int32的数组,其 itemsize 属性为 4
- ndarray.size主要用来统计数组元素的个数,其值等于ndarray.shape返回的元组中元素的乘积。