NumPy提供了很多的函数来快速的生成一个ndarray对象。
a = np.array([1,2,3],dtype = np.int8)
type(a) # numpy.ndarray
示例
- full和full_like:使用指定值来填充数组。
b = np.full(shape = (3,2),fill_value=30) b # array([[30, 30], # [30, 30], # [30, 30]]) b = np.full(shape = (3,2),fill_value=(9,7)) b # array([[9, 7], # [9, 7], # [9, 7]])
m = np.array([[1, 1, 1, 1, 1],[2, 2, 2, 2, 2],[3, 3, 3, 3, 3]]) c = np.full_like(m,fill_value=0) c # array([[0, 0, 0, 0, 0], # [0, 0, 0, 0, 0], # [0, 0, 0, 0, 0]])
na1 = np.full((2,5),10)
# array([[10, 10, 10, 10, 10],
# [10, 10, 10, 10, 10]])
na2 = np.full_like(np.array([0,1,2,3]),5)
# array([5, 5, 5, 5])
- zeros和zeros_like:用来创建元素全是0的数组。
na1 = np.zeros(shape=(3, 2, 4)) # zeros必须要指定shape,用来生成一个指定形状的数组
# array([[[0., 0., 0., 0.],
# [0., 0., 0., 0.]],
#
# [[0., 0., 0., 0.],
# [0., 0., 0., 0.]],
#
# [[0., 0., 0., 0.],
# [0., 0., 0., 0.]]])
na2 = np.zeros_like([1,2,3]) # 根据指定的列表(或数组)的格式,生成一个新的数组
# array([0, 0, 0])
- ones和ones_like:用来创建元素全是1的数组。
na1 = np.ones(shape=(3,2,4))
# array([[[1., 1., 1., 1.],
# [1., 1., 1., 1.]],
#
# [[1., 1., 1., 1.],
# [1., 1., 1., 1.]],
#
# [[1., 1., 1., 1.],
# [1., 1., 1., 1.]]])
na2 = np.ones_like([98,76,55])
# array([1, 1, 1])
- array:将序列转换成为ndarray对象。
# array方法可以将 range,list,tuple,set和dict等序列数据转换成为ndarray对象。 na1 = np.array(range(10)) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) na2 = np.array([1,2,3]) # array([1, 2, 3]) na3 = np.array(('hello','good','yes')) # array(['hello', 'good', 'yes'], dtype='<U5') na4 = np.array({98,78,99,95}) # array({98, 99, 78, 95}, dtype=object) na5 = np.array({'name':'zhangsan','age':18,'score':90}) # array({'name': 'zhangsan', 'age': 18, 'score': 90}, dtype=object)
- arange:根据一个序列生成一个数组,用法和Python里的range类使用基本一致。
na1 = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
na2 = np.arange(3,20) # array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
na3 = np.arange(2,20,3) # array([ 2, 5, 8, 11, 14, 17])
- linspace:生成一个线性数组。
# (10,100)包含开始,也包含结束,endpoint可以设置为False,这样就不包含结束了
b = np.linspace(1,9,num=5)
# array([1., 3., 5., 7., 9.])
- fromfunction:使用指定的函数生成一个数组。
def func(i, j):
print(f'i={i},j={j}')
return i ** j
na1 = np.fromfunction(func, shape=(5, 5))
print(na1)
# i=[[0. 0. 0. 0. 0.]
# [1. 1. 1. 1. 1.]
# [2. 2. 2. 2. 2.]
# [3. 3. 3. 3. 3.]
# [4. 4. 4. 4. 4.]],j=[[0. 1. 2. 3. 4.]
# [0. 1. 2. 3. 4.]
# [0. 1. 2. 3. 4.]
# [0. 1. 2. 3. 4.]
# [0. 1. 2. 3. 4.]]
#[[ 1. 0. 0. 0. 0.]
# [ 1. 1. 1. 1. 1.]
# [ 1. 2. 4. 8. 16.]
# [ 1. 3. 9. 27. 81.]
# [ 1. 4. 16. 64. 256.]]
- fromfile:将文件里的数据加载成为一个数组。
# 写入的时候默认是int32,取的时候也要指定int32类型
nd1 = np.array([1, 2, 3, 4])
nd1.tofile('./a.txt')
x = np.fromfile('./a.txt',dtype='int32')
print(x) #[1 2 3 4]
- np.diag:返回一个对角矩阵。
na = np.diag([1,2,3,4])
# array([[1, 0, 0, 0],
# [0, 2, 0, 0],
# [0, 0, 3, 0],
# [0, 0, 0, 4]])
- eye:返回一个二维的对角数组,其中对角线为1,零点为零。
nd = np.eye(N=5, M=7, k=-1)
# array([[0., 0., 0., 0., 0., 0., 0.],
# [1., 0., 0., 0., 0., 0., 0.],
# [0., 1., 0., 0., 0., 0., 0.],
# [0., 0., 1., 0., 0., 0., 0.],
# [0., 0., 0., 1., 0., 0., 0.]])
a = np.eye(5,5)
# array([[1., 0., 0., 0., 0.],
# [0., 1., 0., 0., 0.],
# [0., 0., 1., 0., 0.],
# [0., 0., 0., 1., 0.],
# [0., 0., 0., 0., 1.]])
- numpy.random包里提供了很多的方法,可以快速的生成一个数组。
na1 = np.random.random(size=5) # 生成指定 size 的 [0.0,1.0)随机浮点数 # array([0.78705688, 0.28925238, 0.30152321, 0.78411459, 0.74078236]) na2 = np.random.randint(5, 100, size=4) # 生成指定 size 的随机整数 # array([42, 95, 52, 43]) na3 = np.random.randn(3, 5) # 生成正态分布的随机数组 # array([[ 1.99137094, -0.29399036, 0.72920737, 0.07041465, 2.31167596],[-1.77122604, 1.09919848, 0.32331871, -0.60882009, -0.29951307],[ 0.18642218, 0.3319576 , 0.24990004, -0.02141016, 1.71957341]]) a = np.random.randint(5,9) # 7 a = np.random.randint(1,9,size=(3,3,3)) # array([[[4, 7, 2], # [5, 7, 1], # [5, 8, 3]], # [[7, 2, 3], # [1, 7, 8], # [5, 8, 1]], # [[1, 1, 6], # [4, 4, 3], # [6, 1, 4]]])
- reshape:改变形状
a = np.arange(1,10) a.reshape(3,3) # array([[1, 2, 3], # [4, 5, 6], # [7, 8, 9]])