NumPy 最重要的一个特点是其 N 维数组对象 ndarray,用于存放同类型数据的集合,内部结构如下:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
array和asarray都可以将结构数据转化为ndarray,主要区别就是当数据源是ndarray时,array会copy出一个副本,占用新的内存,属于深拷贝,但asarray不会。
x = [1,2,3,4,5]
a = np.array(x)
b = np.asarray(x)
a == b
array([ True, True, True, True, True])
该方法用于实现动态数组,接收buffer输入,以流的形式读入转化ndarray对象
s = b'I like python'
sbf = np.frombuffer(s,dtype='S1')
print(sbf)
[b'I' b' ' b'l' b'i' b'k' b'e' b' ' b'p' b'y' b't' b'h' b'o' b'n']
buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b
从可迭代对象中建立 ndarray 对象,返回一维数组。
list=range(5)
it=iter(list) ## 构造迭代器
x=np.fromiter(it, dtype=float)
print(x)
output:
[0. 1. 2. 3. 4.]
创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组(数组元素为随机值)
x = np.empty([3,3], dtype = float)
print(x)
array([[0.00000000e+000, 0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 0.00000000e+000, 6.71929278e-321],
[7.56593016e-307, 2.22522596e-306, 2.56765117e-312]])
创建指定大小的数组,数组元素为 0
x = np.zeros(5) # 默认为浮点数
y = np.zeros((5,), dtype = np.int) # 设置类型为整数
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')]) # 自定义类型
print('x: {0}\n y: {1} \n z: {2}'.format(x,y,z))
x: [0. 0. 0. 0. 0.]
y: [0 0 0 0 0]
z: [[(0, 0.) (0, 0.)]
[(0, 0.) (0, 0.)]]
创建指定形状的数组,数组元素为 1
x = np.ones(5) # 默认为浮点数
y = np.ones([3,3], dtype = int)# 自定义类型
print('x: {0}\n y: {1}'.format(x,y))
x: [1. 1. 1. 1. 1.]
y: [[1 1 1]
[1 1 1]
[1 1 1]]
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray
numpy.arange(start, stop, step, dtype)
x = np.arange(1,100,3).reshape(3,11) ##从1
print(x)
array([[ 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31],
[34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64],
[67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97]])
创建等差数列的一维数组
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
x = np.linspace(1,10,10, retstep= True)
print(x)
(array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
创建对数等比数列
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
x = np.logspace(0,10,10,endpoint=False,base=2)
print(x)
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]