文章目录

  • Python科学计算库NumPy(一):NumPy的ndarray对象及其属性
  • NumPy的ndarray对象
  • (1)创建ndarray对象
  • (2)Numpy数组属性:ndarray对象属性
  • ndarray.shape返回值的理解
  • ndarray.itemsize和ndarray.size的理解


Python科学计算库NumPy(一):NumPy的ndarray对象及其属性

  1. Numpy(Numerical Python)是Python语言的一个第三方库。
  2. Numpy是一个运行速度非常快的数学库。
  3. 支持大量的维度数组与矩阵运算。NumPy提供多维数组对象,以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
  4. 此外也针对数组运算提供了大量的数学函数库。

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.itemsizendarray.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返回的元组中元素的乘积。