Task 01 数据类型及数组创建

Task 01 数据类型及数组创建

常量

numpy.nan
  • 表示空值。
nan = NaN = NAN

两个numpy.nan是不相等的。

import numpy as np

print(np.nan == np.nan)  # False
print(np.nan != np.nan)  # True
  • numpy.isnan(x, *args, **kwargs)

    Test element-wise for NaN and return result as a boolean array.

x = np.array([1, 2, 3, np.nan, 4])
y = np.isnan(x) # [False False False  True False]
z = np.count_nonzero(y) # 1
numpy.inf
  • 表示无穷大。
Inf = inf = infty = Infinity = PINF
numpy.pi
  • 表示圆周率。
import numpy as np
print(np.pi) # 3.141592653589793
numpy.e
  • 表示自然对数。
import numpy as np
print(np.e) # 2.718281828459045

数据类型

Python原生数据类型:bool、int、float、str,相对较少,对于科学计算,通常需要更多的控制。

常用numpy基本类型:

类型备注说明
bool_ = bool88位布尔类型
int8 = byte8位整型
int16 = short16位整型
int32 = intc32位整型
int_ = int64 = long = int0 = intp64位整型
uint8 = ubyte8位无符号整型
uint16 = ushort16位无符号整型
uint32 = uintc32位无符号整型
uint64 = uintp = uint0 = uint64位无符号整型
float16 = half16位浮点型
float32 = single32位浮点型
float_ = float64 = double64位浮点型
str_ = unicode_ = str0 = unicodeUnicode 字符串
datetime64日期时间类型
timedelta64表示两个时间之间的间隔
创建数据类型

numpy的数据类型实际上是dtype对象的实例。

class dtype(object):
    def __init__(self, object, align=False, copy=False):
        pass

每个内建类型都有唯一的字符代码。

字符对应类型备注
bboolean‘b1’
isigned integer‘i1’, ‘i2’, ‘i4’, ‘i8’
uunsigned integer‘u1’, ‘u2’ ,‘u4’ ,‘u8’
ffloating-point‘f2’, ‘f4’, ‘f8’
ccomplex floating-point
mtimedelta64表示两个时间之间的间隔
Mdatetime64日期时间类型
Oobject
S(byte-)stringS3表示长度为3的字符串
UUnicodeUnicode 字符串
Vvoid
import numpy as np

a = np.dtype('b1')
print(a.type)  # <class 'numpy.bool_'>
print(a.itemsize)  # 1 字长
数据类型信息

Machine limits for integer types.

class iinfo(object):
    def __init__(self, int_type):
        pass
    def min(self):
        pass
    def max(self):
        pass
import numpy as np

ii16 = np.iinfo(np.int16)
print(ii16.min)  # -32768
print(ii16.max)  # 32767

Machine limits for floating point types.

class finfo(object):
    def _init(self, dtype):
import numpy as np

ff16 = np.finfo(np.float16)
print(ff16.bits)  # 16
print(ff16.min)  # -65500.0
print(ff16.max)  # 65500.0
print(ff16.eps)  # 0.000977

时间日期和时间增量

datetime64

由于datetime被python中日期时间库占用,在numpy中可以用datetime64将字符串转换成日期时间类型。

日期单位代码含义时间单位代码含义
Yh小时
Mm分钟
Ws
Dms毫秒
--us微秒
--ns纳秒
--ps皮秒
--fs飞秒
--as阿托秒

从字符串创建datetime64类型时,默认情况下,numpy会自动选择单位。

时间日期标准格式:YYYY-MM-YY HH:MM:SS

import numpy as np

a = np.datetime64('2020-10-10')
print(a, a.dtype)  # 2020-10-10 datetime64[D]

a = np.datetime64('2020-10-10 20')
print(a, a.dtype)  # 2020-10-10T20 datetime64[h]

当然,也可以指定强制指定使用的单位。

import numpy as np

a = np.datetime64('2020-03', 'D')
print(a, a.dtype)  # 2020-03-01 datetime64[D]

a = np.datetime64('2020-03', 'Y')
print(a, a.dtype)  # 2020 datetime64[Y]

print(np.datetime64('2020-03') == np.datetime64('2020-03-01'))  # True
print(np.datetime64('2020-03') == np.datetime64('2020-03-02'))  #False

可以从较大的单位转换为较小的单位

使用arange()创建 datetime64 数组,用于生成日期范围。

import numpy as np

a = np.arange('2020-08-01', '2020-08-10', dtype=np.datetime64)
print(a)
# ['2020-08-01' '2020-08-02' '2020-08-03' '2020-08-04' '2020-08-05'
#  '2020-08-06' '2020-08-07' '2020-08-08' '2020-08-09']
print(a.dtype)  # datetime64[D]

a = np.arange('2020-08-01 20:00', '2020-08-10', dtype=np.datetime64)
print(a)
# ['2020-08-01T20:00' '2020-08-01T20:01' '2020-08-01T20:02' ...
#  '2020-08-09T23:57' '2020-08-09T23:58' '2020-08-09T23:59']
datetime64 和 timedelta64 运算

timedelta64 表示两个 datetime64 之间的差。timedelta64 也是带单位的,并且和相减运算中的两个 datetime64 中的较小的单位保持一致。

数组的创建

numpy 提供的最重要的数据结构是ndarray,它是 python 中list的扩展。

import numpy as np #导入numpy
1. 根据现有数据创建ndarray
  • 通过array()函数创建

    array(p_object, dtype=None, copy=true, order='K', subok=False, ndmin=0)

    a=np.array([1,2,3,4]) 
    print(a) # [1 2 3 4]
    
    # 创建二维数组
    c = np.array([[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]])
    print(c, type(c))
    
  • 通过asarray()函数创建

    array()asarray()都可以将结构数据转化为 ndarray,但是array()asarray()主要区别就是当数据源是ndarray 时,array()仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 asarray()不会。

    def asarray(a, dtype=None, order=None):
        return array(a, dtype, copy=False, order=order)
    
  • 通过fromfunction()函数创建?

    fromfunction()从函数中创建数组。

    def fromfunction(function, shape, **kwargs)

    import numpy as np
    def f(x,y):
        return 10*x+y
    
    x=np.fromfunction(f,(5,4),dtype=int)
    print(x)
    
2. 依据 ones 和 zeros 填充方式
  • 零数组

    zeros()函数:返回给定形状和类型的零数组。

    zeros_like()函数:返回与给定数组形状和类型相同的零数组。

def zeros(shape, dtype=None, order='C'):
def zeros_like(a, dtype=None, order='K', subok=True, shape=None):
  • 1数组

    ones()函数:返回给定形状和类型的1数组。

    ones_like()函数:返回与给定形状和类型相同的1数组。

def ones(shape, dtype=None, order='C'):
def ones_like(a, dtype=None, order='K', subok=True, shape=None):
  • 空数组

    empty()函数:返回一个空数组,数组元素为随机数

    empty_like函数:返回与给定数组具有相同形状和类型的新数组。

def empty(shape, dtype=None, order='C'): 
def empty_like(prototype, dtype=None, order='K', subok=True, shape=None):
  • 单位数组

    eye()函数:返回一个对角线上为1,其它地方为零的单位数组。

    identity()函数:返回一个方的单位数组。

def eye(N, M=None, k=0, dtype=float, order='C'):
def identity(n, dtype=None):
  • 对角数组

    diag()函数:提起对角线或构造对角数组。

def diag(v, k=0):
  • 常数数组

    full()函数:返回一个常数数组。

    full_like()函数:返回与给定数组具有相同形状和类型的常数数组。

def full(shape, fill_value, dtype=None, order='C'):
def full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None):
3. 利用数值范围创建ndarray
  • arange()函数:返回给定间隔内的均匀间隔的值。
  • linspace()函数:返回指定间隔内的等间隔数字。
  • logspace()函数:返回数以对数刻度均匀分布。
  • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。
def arange([start,] stop[, step,], dtype=None): 
def linspace(start, stop, num=50, endpoint=True, retstep=False, 
             dtype=None, axis=0):
def logspace(start, stop, num=50, endpoint=True, base=10.0, 
             dtype=None, axis=0):
def rand(d0, d1, ..., dn): 
4. 结构数组的创建

结构数组,首先需要定义结构,然后利用np.array()来创建数组,其参数dtype为定义的结构。

  • 利用字典来定义结构
import numpy as np

personType = np.dtype({
    'names': ['name', 'age', 'weight'],
    'formats': ['U30', 'i8', 'f8']})

a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
             dtype=personType)
print(a, type(a))
# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]
# <class 'numpy.ndarray'>

利用包含多个元组的列表来定义结构**

【例】

import numpy as np

personType = np.dtype([('name', 'U30'), ('age', 'i8'), ('weight', 'f8')])
a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
             dtype=personType)
print(a, type(a))
# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]
# <class 'numpy.ndarray'>

# 结构数组的取值方式和一般数组差不多,可以通过下标取得元素:
print(a[0])
# ('Liming', 24, 63.9)

print(a[-2:])
# [('Mike', 15, 67. ) ('Jan', 34, 45.8)]

# 我们可以使用字段名作为下标获取对应的值
print(a['name'])
# ['Liming' 'Mike' 'Jan']
print(a['age'])
# [24 15 34]
print(a['weight'])
# [63.9 67.  45.8]

数组属性

  • numpy.ndarray.ndim用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。
  • numpy.ndarray.shape表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。
  • numpy.ndarray.size数组中所有元素的总量,相当于数组的shape中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。
  • numpy.ndarray.dtype ndarray 对象的元素类型。
  • numpy.ndarray.itemsize以字节的形式返回数组中每一个元素的大小。

ndarray中所有元素必须是同一类型,否则会自动向下转换,int->float->str

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python中,可以使用多种方法创建空的二维数组。 方法一:使用列表嵌套 ```python arr_data = [[None * 2 for _ in range(4)] ``` 这个方法使用了列表嵌套的方式来创建一个包含4行2列的二维数组。每个元素都初始化为None。 方法二:使用numpy库 ```python import numpy as np arr_data = np.empty((4, 2)) ``` 这个方法使用了numpy库的empty函数来创建一个形状为4行2列的空二维数组。empty函数会分配一块指定大小的内存,并不会初始化数组元素的值。 参考文献: 严格意义上说,Python中并没有数组的概念,Python中表达一组数据有多种形式,例如list,tuple,set等数据结构都可以表达一组数,并且这组数也没有C和C中数组的同质限制,这些数可以是任何一种数据类型。 方法一: ```python import numpy as np arr_data = [None]*4 for i in range(len(arr_data)): arr_data[i = [0]*2 for j in range(len(arr_data[i])): arr_data[i][j = [0]*3 array_data = np.array(arr_data) print(array_data.shape) print(array_data) ``` 方法二: ```python import numpy as np arr = np.zeros((2,3), dtype=np.float64) print(arr) ```<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python如何创建二维数组和初始化](https://blog.csdn.net/oJinGangZuan/article/details/126870747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python学习之创建数组](https://blog.csdn.net/weixin_42580662/article/details/127881599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值