Day 03-数组创建-灵析社区

野生程序员在线

本节内容¶

  • 1、python list创建
  • 2、现有数据创建
  • 3、特殊值创建(重要)
  • 4、范围创建(重要)
  • 5、创建特定矩阵
  • 6、随机创建(重要)

一、简单创建

import numpy as np
# 一维
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
print(type(x))
# <class 'numpy.ndarray'>
print(x.shape)
# (2, 3)
print(x.dtype)
# dtype('int32')
print("===============")
#python list创建
x = np.array([2, 3, 1, 0])
print(x)

二、现有数据创建数组

有以下常用的方法,可以将现有的各类数据创建一个数组(按 np.xxx 格式使用)

# python list
np.array([1, 2, 3])
#直接创建多维度
np.array([[1, 2], [3, 4]])
'''
array([[1, 2],
       [3, 4]])
'''
#指定维度
np.array([1, 2, 3], ndmin=2)
# array([[1, 2, 3]])

#指定类型
np.array([1, 2, 3], dt='float16')

#从子类创建
np.array(np.mat('1 2; 3 4'))
'''
array([[1, 2],
       [3, 4]])
'''

2.1、转为数组 numpy.asarray

1、numpy.asarray(a, dtype=None, order=None) 将输入的类似列表的序列转换为数组。返回一个 ndarray

2、如果输入已经是具有匹配 dtype 和 order 的 ndarray,则不执行复制

3、如果 a 是 ndarray 的子类,则返回基类 ndarray。

#将列表转换为数组:
a = [1, 2]
np.asarray(a)
np.asarray(a) is a  #数组未复制

#设置了 dtype,则仅当 dtype 不匹配时才复制数组:
a = np.array([1, 2], dtype=np.float32)
np.asarray(a, dtype=np.float32) is a
# True
np.asarray(a, dtype=np.float64) is a
# False

2.2、深拷贝 numpy.copy

返回给定对象的数组副本,相当于 np.array(a, copy=True)。

x = np.array([1, 2, 3])
y = x # 赋值
z = np.copy(x) # 深拷贝

x[0] = 0 # 修改数据

x
# array([0, 2, 3])
y # 随 x 修改而修改
# array([0, 2, 3])
z # 深拷贝未随 x 修改而修改
# array([1, 2, 3])

三、创建特殊值数组(重要)

有以下常用的方法,可以创建一个矩阵内为特殊数字的数组(按 np.xxx 格式使用)。

值全为 0
np.zeros(5)
# array([ 0.,  0.,  0.,  0.,  0.])
np.zeros((5,), dtype=int)
# array([0, 0, 0, 0, 0])
np.zeros((2, 1))
'''
array([[ 0.],
       [ 0.]])
'''

# 值全为 1
np.ones(5)
# array([1., 1., 1., 1., 1.])


# 值全为指定填充值
np.full((2, 2), np.inf)
'''
array([[inf, inf],
       [inf, inf]])
'''
np.full((2, 2), 10)
'''
array([[10, 10],
       [10, 10]])
'''
np.full((2, 2), [1, 2])
'''
array([[1, 2],
       [1, 2]])
'''

#np.empty() 返回给定形状和类型的新数组,内容随机
np.empty([2, 3], dtype=int)
'''
array([[0, 0, 1],
       [1, 1, 1]])
'''

#np.ones_like(a) 等按传入的数据(array_like)形状生成指定值的新数组:
a = np.arange(6).reshape((2, 3))
a
'''
array([[0, 1, 2],
       [3, 4, 5]])
'''
np.ones_like(a)
'''
array([[1, 1, 1],
       [1, 1, 1]])
'''

#np.eye 返回对角线上值为 1,其他位置为 0 的数据:
np.eye(3, dtype=int)
'''
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])
'''

四、范围创建数组

有以下常用的方法,可以根据给定的数据范围创建一个数组:

4.1、范围均匀值 np.arange

np.arange 在给定的间隔内返回均匀分布的值。值是在半开区间 [start,stop) 内生成的

#默认0-3
np.arange(3)
# array([0, 1, 2])
np.arange(3,7)
# array([3, 4, 5, 6])
np.arange(3,7,2)
# array([3, 5])
np.arange(3,4,.2)
# array([3. , 3.2, 3.4, 3.6, 3.8])

4.2、等距数字 np.linspace

np.linspace() 返回指定间隔内的等距数字。返回在 [start,stop] 间隔内计算的等距采样数

#指定数量
np.linspace(2.0, 3.0, num=5)
# array([2.  , 2.25, 2.5 , 2.75, 3.  ])
# 右开区间(不包含右值)
np.linspace(2.0, 3.0, num=5, endpoint=False)
# array([2. ,  2.2,  2.4,  2.6,  2.8])

4.3、对数均匀分布 np.logspace

同上

np.logspace(2.0, 3.0, num=4)
# array([ 100.        ,  215.443469  ,  464.15888336, 1000.        ])
np.logspace(2.0, 3.0, num=4, endpoint=False)
# array([100.        ,  177.827941  ,  316.22776602,  562.34132519])
np.logspace(2.0, 3.0, num=4, base=2.0)
# array([4.        ,  5.0396842 ,  6.34960421,  8.        ])

五、numpy构建规则矩阵

有以下常用的方法,可以构建一定规则的矩阵:

5.1、提取构造对角线数组 np.diag

1、如果传入的是一个二维数组,提取出对角线的值形成一个一维数组,还可以传入参数 k 对对角线做下移和下移

2、如果传入一个一维数组,则生成一个对角线数组,对角线上的值为一维数组的值。

x = np.arange(9).reshape((3,3))
x
'''
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
'''
# 传入的是二维数组,提取出对角线上的值数组
np.diag(x)
# array([0, 4, 8])
np.diag(x, k=1) # 上移
# array([1, 5])
np.diag(x, k=-1) # 下移
# array([3, 7])

# 将一维数组转为方阵,对角线为数组值
np.diag(np.arange(4))
'''
array([[0, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3]])
'''

5.2、展开为对角线 np.diagflat

将原数组(array_like)展平输入作为对角线二维数组的对角线的值。

np.diagflat([[1,2], [3,4]])
'''
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])
'''
# 设定 k 值,上移 1 位
np.diagflat([1,2], 1)
'''
array([[0, 1, 0],
       [0, 0, 2],
       [0, 0, 0]])
'''

5.3、三角矩阵 np.tri

用于创建一个数组,该数组在给定对角线处和下方(在这种情况下为k)包含1,在数组的所有其他位置包含 0。

# 上移 2 位
np.tri(3, 5, 2, dtype=int)
'''
array([[1, 1, 1, 0, 0],
       [1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1]])
'''
# 下移一位
np.tri(3, 5, -1)
'''
array([[0.,  0.,  0.,  0.,  0.],
       [1.,  0.,  0.,  0.,  0.],
       [1.,  1.,  0.,  0.,  0.]])
'''

六、NumPy 创建随机样本数组

6.1、numpy.random.rand()

numpy.random.rand(d0,d1...dn)

  • rand函数根据给定维度生成半开区间[0,1)之间的数据,包含0,不包含1
  • dn表示每个维度
  • 返回值为指定纬度的numpy.ndarray
np.random.rand(3, 3) # shape: 3*3
'''
array([[0.94340617, 0.96183216, 0.88510322],
       [0.44543261, 0.74930098, 0.73372814],
       [0.29233667, 0.3940114 , 0.7167332 ]])
'''

6.2、np.random.randn()

numpy.random.randn(d0,d1,…,dn)

  • randn函数返回一个或一组样本,具有标准正态分布
  • dn表示个维度
  • 返回值为指定维度的numpy.ndarray
np.random.randn() # 当没有输入参数时,仅返回一个值

-0.7377941002942127

np.random.randn(3, 3)

array([[-0.20565666,  1.23580939, -0.27814622],
       [ 0.53923344, -2.7092927 ,  1.27514363],
       [ 0.38570597, -1.90564739, -0.10438987]])

6.3、numpy.random.randint()

numpy.random.randint(low, high=None, size=None, dtype=’l’)

  • 从区间[low,high)返回随机整形
  • 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
  • high没有填写时,默认生成随机数的范围是[0,low)
np.random.randint(1, size = 10) # 返回[0, 1)之间的整数,所以只有0

#array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

np.random.randint(1, 5) # 返回[1, 5)之间随机的一个数字

#2

6.4、numpy.random.choice()(重要)

numpy.random.choice(a, size=None, replace=True, p=None)

  • 从给定的一位数组中生成一个随机样本
  • a要求输入一维数组类似数据或者是一个int;size是生成的数组纬度,要求数字或元组;replace为布尔型,决定样本是否有替换;p为样本出现概率

阅读量:767

点赞量:0

收藏量:0