NumPy的核心特征之一就是N-维数组对象——ndarray。该数组容许你使用相似于标量的操做语法在整块数据上进行数学计算。python
接下来让咱们举个例子感觉一下:数组
#!/usr/bin/python # -*- coding: UTF-8 -*- import numpy as np # 生成随机数组 data = np.random.randn(2,3) print(data) # 给数组加上一个数学操做 print(data * 10) print(data + data)
结果以下:dom
ndarray是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。函数
ndarray 对象是用于存放同类型元素的多维数组。spa
ndarray 中的每一个元素在内存中都有相同存储大小的区域。3d
ndarray中比较重要的属性code
咱们经常使用的最简单的建立数组的方式就是使用array函数。对象
array函数能够将一个序列型对象转换成为NumPy数组。例如:blog
data_list = [6, 7.5, 8, 0, 1] arr_list = np.array(data_list) print(arr_list)
结果:索引
array函数还会将嵌套序列,自动转换成多维数组。
data_list2 = [[1,2,3,4],[5,6,7,8]] arr_list2 = np.array(data_list2) print(arr_list2) # 由于data_list2是一个包含列表的列表,因此NumPy数组arr_list2造成了一个二维数组 # 咱们能够经过shape和ndim(ndim:秩,即轴的数量或维度的数量)肯定 print(arr_list2.shape) print(arr_list2.ndim)
输出:
arange是Python内建函数range的数组版。
其余能够建立数组的函数有:
numpy.empty
建立一个指定形状(shape)、数据类型(dtype)且未初始化的数组,注意 − 数组元素为随机值,由于它们未初始化。
numpy.zeros
建立指定大小的数组,数组元素以 0 来填充。
numpy.ones
建立指定形状的数组,数组元素以 1 来填充:
empty_arr = np.empty((3,4),dtype=int) print(empty_arr) zero_arr = np.zeros((2,3)) print(zero_arr) one_arr = np.ones((4,4)) print(one_arr)
numpy.linspace
numpy.linspace 函数用于建立一个一维数组,数组是一个等差数列构成的,格式以下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
numpy.logspace
numpy.logspace 函数用于建立一个于等比数列。格式以下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
参数说明:
数据类型,即dtype,是一个特殊的对象。它包含了ndarray须要为某一种类型的数据所申明的内存块信息。
Numpy经常使用的数据类型:
可使用astype方法来显式地转换数组的数据类型。
向量化——能够对数组进行批量操做而无须任何for循环的特性。
num = np.array([[1,2,3,4],[5,6,7,8]]) print(num) print(num + num) print(num * num) print(1 / num) print(num ** 0.5)
输出以下:
num2 = np.random.randint(100,size=(2,4)) print(num2 > num)
结果以下:
广播是指 NumPy 在算术运算期间处理不一样形状的数组的能力。对数组的算术运算一般在相应的元素上进行。
若是两个数组的维数不相同,则元素到元素的操做是不可能的。 然而,在 NumPy 中仍然能够对形状不类似的数组进行操做,由于它拥有广播功能。
较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
当运算中的 2 个数组的形状不一样时,numpy 将自动触发广播机制。如:
a = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]]) b = np.array([1, 2, 3]) print(a + b)
下面的图片展现了数组 b 如何经过广播来与数组 a 兼容。
广播的规则: