【NumPy】 快速构建 ndarray 对象(np.empty、np.full、np.titl、np.r_、np.linspace)

____tz_zs

numpy 提供了多了函数来快速创建不同需求的数组。对于普通的 ndarray 的创建、切片、复制、改变维度和数据类型等操作,见我另一篇博客:https://blog.csdn.net/tz_zs/article/details/73929778

empty

np.empty 构造一个长度为 shape 的未初始化数组,这个数组的元素可能是内存位置上存在的任何数值。

empty(shape, dtype=float, order='C')

  • shape : int 或者 int元组
  • dtype : 数组中元素的格式
  • order : 'C' 或 'F', 分别代表,行优先row-major (C-style)和列优先column-major (Fortran-style),表示在计算机内存中的存储元素的顺序。
# -*- coding: utf-8 -*-
"""
@author: tz_zs
"""

import numpy as np

# 构造一个长度为 shape 的未初始化数组,这个数组的元素可能是内存位置上存在的任何数值
ndarray = np.empty(shape=3)
print(ndarray)
"""
[  4.94065646e-324   4.94065646e-324   4.94065646e-324]
"""
ndarray = np.empty(shape=(2, 3))
print(ndarray)
"""
[[  6.89911851e-310   6.89911851e-310   6.89911705e-310]
 [  2.41806952e-316   6.89911705e-310   6.89911705e-310]]
"""
ndarray = np.empty(shape=(2, 3), dtype=int)
print(ndarray)
"""
[[139639713229752 139639713229752 139639683772968]
 [       48942272 139639683773136 139639683772968]]
"""
ndarray = np.empty(shape=(2, 3), order="F")
print(ndarray)
"""
[[  6.89911851e-310   6.89911705e-310   6.89911705e-310]
 [  6.89911851e-310   2.41806952e-316   6.89911705e-310]]
"""
ndarray = np.empty(shape=(2, 3), dtype=int, order="F")
print(ndarray)
"""
[[139639713229752 139639683773136        48942272]
 [139639683772968 139639713229752 139639683772968]]
"""

 

ones / zeros

np.ones / np.zeros 创建一个全0/1的数组。

numpy.ones(shape, dtype=None, order='C')

numpy.zeros(shape, dtype=float, order='C')

返回给定大小和类型的新数组。shape代表返回的数组的大小(几行几列),dtype是数据类型,order指存储的规则是“c”还是“f”,即行在前和列在前。

官方文档: numpy.ones | numpy.zeros

>>> np.ones(5)
array([ 1.,  1.,  1.,  1.,  1.])

>>> np.ones((5,), dtype=np.int)
array([1, 1, 1, 1, 1])

>>> np.ones((2, 1))
array([[ 1.],
       [ 1.]])

>>> np.ones((2,2))
array([[ 1.,  1.],
       [ 1.,  1.]])

>>> np.zeros(5)
array([ 0.,  0.,  0.,  0.,  0.])

>>> np.zeros((5,), dtype=np.int)
array([0, 0, 0, 0, 0])

>>> np.zeros((2, 1))
array([[ 0.],
       [ 0.]])

>>> s = (2,2)
>>> np.zeros(s)
array([[ 0.,  0.],
       [ 0.,  0.]])

>>> np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) # custom dtype
array([(0, 0), (0, 0)],
      dtype=[('x', '<i4'), ('y', '<i4')])

·

#!/usr/bin/python2.7
# -*- coding:utf-8 -*-

"""
@author:    tz_zs
"""
import numpy as np

a = np.zeros((7, 7), dtype=int)
a[:2, :3] = 1
a[2:4, 2:4] = 2
a[4, 4] = 3
a[:, 5] = 4
a[[0, 2, 4, 6], 6] = 5
print(a)
"""
[[1 1 1 0 0 4 5]
 [1 1 1 0 0 4 0]
 [0 0 2 2 0 4 5]
 [0 0 2 2 0 4 0]
 [0 0 0 0 3 4 5]
 [0 0 0 0 0 4 0]
 [0 0 0 0 0 4 5]]
"""

 

full

np.full 构造一个数组,用指定值填充其元素

full(shape, fill_value, dtype=None, order='C')

  • shape:int 或者 int元组
  • fill_value:填充到数组中的值
# -*- coding: utf-8 -*-
"""
@author: tz_zs
"""

import numpy as np

# 构造一个2x3的数组,其中元素全部都为 7
ndarray = np.full((2, 3), 7)
print(ndarray)
"""
[[7 7 7]
 [7 7 7]]
"""

 

titl

np.titl() 扩展

np.tile(A, reps)

# -*- coding: utf-8 -*-
"""
@author: tz_zs
np.titl() 扩展
"""

import numpy as np

n1 = np.arange(0, 40, 10)
print(n1)  # [ 0 10 20 30]
n2 = np.tile(n1, (3, 5))  # 扩展
print(n2)
'''
[[ 0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30]
 [ 0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30]
 [ 0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30  0 10 20 30]]
'''

 

r_

np.r_

官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html

#普通的拼接数组
X = np.r_[[1,2,3],[4,5,6],[7,8,9]]
print X
#第一个字符串控制组合
。。。

 

linspace

np.linspace 主要用于间隔采样,在指定的间隔内返回均匀间隔的数字

官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • start 采样的起点,
  • stop 采样的终点,
  • num 采样的点个数,默认为50个,必须是非负数。
  • endpoint 决定是否包括端点stop,默认为true,即包括stop点。
# -*- coding: utf-8 -*-
"""
@author: tz_zs

"""

import numpy as np

n1 = np.linspace(-5, 5, 5)
print(n1)
# [-5. - 2.5  0.   2.5  5.]
n2 = np.linspace(-5, 5, 5, False)
print(n2)
# [-5. - 3. - 1.  1.  3.]
  • retstep 默认为 false,当为true时,返回值是(samples,step)格式,step为样本之间的间距。
  • dtype 为输出数组的类型。如果dtype没有给出,则从其他输入参数推断数据类型。
n1 = np.linspace(start=-5, stop=5, num=5, endpoint=True, retstep=True)
print(n1)
# (array([-5. , -2.5,  0. ,  2.5,  5. ]), 2.5)

n2 = np.linspace(start=-5, stop=5, num=5, endpoint=True, retstep=True, dtype=int)
print(n2)
# (array([-5, -2,  0,  2,  5]), 2.5)

end

### 回答1: 这个问题可以回答。numpy.ndarraynp.array 是同一种数据类型,因此不需要进行转换。numpy.ndarraynumpy 库中的多维数组对象,而 np.arraynumpy 库中的数组类。可以直接使用 np.array() 函数创建一个 numpy 数组。 ### 回答2: 将numpy.ndarray转化为np.array是多余的,因为numpy.ndarray就是numpy数组的一种表示形式。numpy.ndarray是一个多维数组对象,而np.arraynumpy库中用于创建数组对象函数。实际上,当我们使用numpy库进行数组操作时,创建的数组对象就是numpy.ndarray类型的。因此,无需进行任何转化,numpy.ndarray本身就是np.array的一种形式,可以直接使用。 ### 回答3: 将numpy.ndarray转化为np.array是一种效果相同但不同名称的操作。numpy.ndarrayNumPy库中的多维数组对象,而np.arrayNumPy库中的数组类。 要将numpy.ndarray转化为np.array很简单,只需使用np.array()函数即可。这个函数可以接收numpy.ndarray作为参数,并返回一个新的数组对象。 示例代码如下: ``` import numpy as np # 创建一个numpy.ndarray对象 ndarray_obj = np.array([[1, 2, 3], [4, 5, 6]]) # 将numpy.ndarray转化为np.array array_obj = np.array(ndarray_obj) print("numpy.ndarray对象:") print(ndarray_obj) print("np.array对象:") print(array_obj) ``` 运行结果如下: ``` numpy.ndarray对象: [[1 2 3] [4 5 6]] np.array对象: [[1 2 3] [4 5 6]] ``` 可以看到,通过np.array()函数numpy.ndarray转化为np.array之后,对象的值和形状都不发生变化。这个转化操作一般用于将其他类型的数组对象(如Python列表)转化为NumPy数组对象,以便于进行NumPy库提供的各种操作和计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值