阿里云AI学习-Numpy入门学习1-数据类型及数组创建

目录

一、常量

二、数据类型

1、常见数据类型

三、时间日期和时间增量 

1、datetime64

 2、timedelta64

四、数组的创建

1. 依据现有数据来创建 ndarray

(a)通过array()函数进行创建。

(b)通过asarray()函数进行创建

2. 依据 ones 和 zeros 填充方式

(a)零数组

(b)1数组

(c)空数组

(d)单位数组

(e)对角数组

(f)常数数组

3.、利用数值范围来创建ndarray

4、 结构数组的创建

五、练习题

一、常量

numpy.nan 表示空值

numpy.inf表示正无穷大

二、数据类型

1、常见数据类型

类型 备注 说明
bool_ = bool8 8位 布尔类型
int8 = byte 8位 整型
int16 = short 16位 整型
int32 = intc 32位 整型
int_ = int64 = long = int0 = intp 64位 整型
uint8 = ubyte 8位 无符号整型
uint16 = ushort 16位 无符号整型
uint32 = uintc 32位 无符号整型
uint64 = uintp = uint0 = uint 64位 无符号整型
float16 = half 16位 浮点型
float32 = single 32位 浮点型
float_ = float64 = double 64位 浮点型
str_ = unicode_ = str0 = unicode |Unicode 字符串
datetime64 |日期时间类型
timedelta64 |表示两个时间之间的间隔

三、时间日期和时间增量 

1、datetime64

在 numpy 中,我们很方便的将字符串转换成时间日期类型 datetime64 

datatime64是带单位的日期时间类型,其单位如下:

日期单位 代码含义 时间单位 代码含义
Y h 小时
M m 分钟
W s
D ms 毫秒

 【例】从字符串创建 datetime64 类型时,默认情况下,numpy 会根据字符串自动选择对应的单位。

import numpy as np

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

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

a = np.datetime64('2020-03-08 20:00:05')
print(a, a.dtype)  # 2020-03-08T20:00:05 datetime64[s]

a = np.datetime64('2020-03-08 20:00')
print(a, a.dtype)  # 2020-03-08T20:00 datetime64[m]

【例】从字符串创建 datetime64 类型时,可以强制指定使用的单位。

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

 由上例可以看出,2019-03 和 2019-03-01 所表示的其实是同一个时间。 事实上,如果两个 datetime64 对象具有不同的单位,它们可能仍然代表相同的时刻。并且从较大的单位(如月份)转换为较小的单位(如天数)是安全的。

【例】从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。

import numpy as np

a = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
print(a, a.dtype)
# ['2020-03-01T00:00' '2020-03-08T00:00' '2020-03-08T20:00'] datetime64[m]

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

a = np.arange('2020-05', '2020-12', dtype=np.datetime64)
print(a)
# ['2020-05' '2020-06' '2020-07' '2020-08' '2020-09' '2020-10' '2020-11']
print(a.dtype)  # datetime64[M]

 2、timedelta64

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

import numpy as np

a = np.datetime64('2020-03-08') - np.datetime64('2020-03-07')
b = np.datetime64('2020-03-08') - np.datetime64('202-03-07 08:00')
c = np.datetime64('2020-03-08') - np.datetime64('2020-03-07 23:00', 'D')

print(a, a.dtype)  # 1 days timedelta64[D]
print(b, b.dtype)  # 956178240 minutes timedelta64[m]
print(c, c.dtype)  # 1 days timedelta64[D]

 注意:生成 timedelta64时,要注意年('Y')和月('M')这两个单位无法和其它单位进行运算(一年有几天?一个月有几个小时?这些都是不确定的)

四、数组的创建

1. 依据现有数据来创建 ndarray

(a)通过array()函数进行创建。

import numpy as np

a = np.array([0, 1, 2, 3, 4])
print(a, type(a))
# [0 1 2 3 4] 

(b)通过asarray()函数进行创建

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

2. 依据 ones 和 zeros 填充方式

(a)零数组

import numpy as np

x = np.zeros(5)
print(x)  # [0. 0. 0. 0. 0.]
x = np.zeros([2, 3])
print(x)
# [[0. 0. 0.]
#  [0. 0. 0.]]

(b)1数组

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

(c)空数组

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

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.empty_like(x)
print(y)
# [[  7209029   6422625   6619244]
#  [      100 707539280       504]]

(d)单位数组

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

(e)对角数组

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

import numpy as np

x = np.arange(9).reshape((3, 3))
print(x)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]
print(np.diag(x))  # [0 4 8]
print(np.diag(x, k=1))  # [1 5]
print(np.diag(x, k=-1))  # [3 7]

v = [1, 3, 5, 7]
x = np.diag(v)
print(x)
# [[1 0 0 0]
#  [0 3 0 0]
#  [0 0 5 0]
#  [0 0 0 7]]

(f)常数数组

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

def full(shape, fill_value, dtype=None, order='C'):
x = np.full((2, 7), 7)
print(x)
# [[7 7 7 7 7 7 7]
#  [7 7 7 7 7 7 7]]
  • 如何创建一个布尔数组?
    import numpy as np
    
    arr = np.full([3, 3], True, dtype=np.bool)
    print(arr)
    # [[ True  True  True]
    #  [ True  True  True]
    #  [ True  True  True]]

3.、利用数值范围来创建ndarray

  • arange()函数:返回给定间隔内的均匀间隔的值。
    import numpy as np
    
    x = np.arange(5)
    print(x)  # [0 1 2 3 4]
    
    x = np.arange(3, 7, 2)
    print(x)  # [3 5]
  • linspace()函数:返回指定间隔内的等间隔数字。
  • logspace()函数:返回数以对数刻度均匀分布。
  • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。

4、 结构数组的创建

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

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

a = np.array([1, 2, 3, 4, 5])
print(a.shape)  # (5,)
print(a.dtype)  # int32
print(a.size)  # 5
print(a.ndim)  # 1
print(a.itemsize)  # 4

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

五、练习题

1、创建一个 3x3x3的随机数组

Z = np.random.random((3,3,3))
print(Z)

你可能感兴趣的:(numpy,学习,python)