专业编程基础技术教程

网站首页 > 基础教程 正文

Python NumPy 数值计算 和 ndarray的数据类型

ccvgpt 2024-10-12 13:29:07 基础教程 7 ℃

Python NumPy关注的是数值计算,如果没有特别指定,数据类型基本都是float64

Python NumPy 数值计算 和 ndarray的数据类型

##数组创建函数

  • array将输入数据(列表、元组、数组或其他序列类型)转换为ndarray

  • asarray将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制

  • arange类似于内置的range,但返回的是一个ndarray而不是列表

  • ones、ones_like根据指定的形状和dtype创建一个全1数组。ones_like以另一个

  • 数组为参数,并根据其形状和dtype创建一个全1数组

  • zeros、zeros_like 和onse类似,只不过产生的是全0 数组

  • empty、empty_like创建新数组,只分配内存空间但不填充任何值

  • eye、identity创建一个正方的 N * N单位矩阵(对角线为1,其余为0)

ndarray的数据类型

dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。

ipdb> arr11 = np.array([1, 2, 3], dtype=np.float64)

ipdb> arr11

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

ipdb> arr12 = np.array([1, 2, 3], dtype=np.int32)

ipdb> arr12

array([1, 2, 3])

##可以通过ndarray的astype方法显示地转换dtype:

ipdb> arr = np.array([1, 2, 3, 4, 5])

ipdb> arr.dtype

dtype('int32')

ipdb> float_arr = arr.astype(np.float64)

ipdb> float_arr

array([1., 2., 3., 4., 5.])

ipdb> float_arr.dtype

dtype('float64')

##如果将浮点数转换成整数,则小数部分将会被截断:

ipdb> arr = np.array([3.7, -1.2, -2.0, 2.6, 11.2, 10.9])

ipdb> arr.astype(np.int32)

array([ 3, -1, -2, 2, 11, 10])

ipdb> arr.dtype

dtype('float64')

##如果字符串数组表示的全是数组,也可以用astype将其转换我数值形式

ipdb> str_arr = np.array(['1.24', '-8.7', '343'], dtype=np.string_)

ipdb> str_arr

array(['1.24', '-8.7', '343'], dtype='|S4')

ipdb> str_arr.astype(float)

array([ 1.24, -8.7 , 343. ])

##数组的dtype还有另外一个用法:

ipdb> intarr = np.arange(10)

ipdb> intarr

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

ipdb> arr1 = np.array([.22, .270, .33, .22, 44, .55], dtype=np.float64)

ipdb> arr1

array([ 0.22, 0.27, 0.33, 0.22, 44. , 0.55])

##使用astype无论如何都会创建一个新的数组

ipdb> intarr.astype(arr1.dtype)

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

##数组和标量之间的运算

##不用循环数组就能对数据执行批量运算的过程叫做矢量化

##大小相等的数组之间的任何算术运算都会将运算应用到元素级

ipdb> arr = np.array([[1., 2., 3.], [4., 5., 6.,]])

ipdb> arr

array([[1., 2., 3.],

[4., 5., 6.]])

ipdb> arr * arr

array([[ 1., 4., 9.],

[16., 25., 36.]])

##同样,数组与标量的算术运算也会将那个变量值传播到各个元素:

ipdb> arr

array([[1., 2., 3.],

[4., 5., 6.]])

ipdb> arr + 1

array([[2., 3., 4.],

[5., 6., 7.]])

ipdb> arr * 0.5

array([[0.5, 1. , 1.5],

[2. , 2.5, 3. ]])

##不同大小的数组之间的运算叫做广播。

最近发表
标签列表