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]])
'''
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
返回给定对象的数组副本,相当于 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]])
'''
有以下常用的方法,可以根据给定的数据范围创建一个数组:
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])
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])
同上
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. ])
有以下常用的方法,可以构建一定规则的矩阵:
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]])
'''
将原数组(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]])
'''
用于创建一个数组,该数组在给定对角线处和下方(在这种情况下为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.random.rand(d0,d1...dn)
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 ]])
'''
numpy.random.randn(d0,d1,…,dn)
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]])
numpy.random.randint(low, high=None, size=None, dtype=’l’)
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
numpy.random.choice(a, size=None, replace=True, p=None)
阅读量:767
点赞量:0
收藏量:0