创建numpy的ndarrays数组
创建数组的最简单方法是使用 array 函数。这接受任何类似序列的对象(包括其他数组)并生成一个包含传递数据的新 NumPy 数组。例如,列表是很好的转换候选对象:
一种最简单的数组创建方式是使用array函数,这个函数接受任何类似序列的对象参数来创建numpy数组,包括接受numpy数组本身作为参数来创建新的数组,这个新的数组接受参数传递过来的数据作为新的数组中的元素。下面举例说明。用python的列表list作为参数来创建数组,如下:
import numpy as np
#新建一个python的list列表
data1 = [6, 7, 8, 9, 0]
#用array函数接受data1作为参数创建数组
arr1 = np.array(data1)
print(arr1)
控制台输出:[6 7 8 9 0]
如果用嵌套的等长列表作为array函数参数来创建数组,那么这个嵌套且内部列表等长的列表将被转换为多维数组,下面创建一个2维数组:
import numpy as np
#python 内置的嵌套列表list,其中每个元素长度为4
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
#用嵌套列表创建一个二维数组
arr2 = np.array(data2)
print(arr2)
控制台打印输出结果:
[[1 2 3 4]
[5 6 7 8]]
看输出结果是一个2行4列的数组。
可以用数组的ndim属性来查看这个arr2数组是几维的。arr2.ndim 输出2 表示2维数组。
可以用数组的shape属性来看下这个arr2数组的形状。arr2.shape 输出一个python元组(2,4),表示是一个2行4列的二维数组。
除了 numpy.array 之外,还有许多其他函数可用于创建新数组。例如,numpy.zeros 和 numpy.ones 分别创建具有给定长度或形状的 0 或 1 数组。numpy.empty 也可以用于创建一个数组,而不将其值初始化为任何特定值。如果要使用这些方法创建更高维度的数组,可以传递一个元组参数,如下举例:
import numpy as np
#用zeros函数创建长度为10,每个元素值为0. 的一维数组
z_arr = np.zeros(10)
print(z_arr)
#用zeros函数接收一个元组(3,6)作为参数,创建每个元素值为0. 的3行6列的二维数组
z_arr2 = np.zeros((3, 6))
print(z_arr2)
#用empty函数接收一个元组(2,3,2)作为参数,创建每个元素不赋值的三位数组
z_arr3 = np.empty((2, 3, 2))
print(z_arr3)
输出结果:
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
[[[6.23042070e-307 4.22795269e-307]
[1.69121367e-306 1.78022342e-306]
[1.05700345e-307 3.11525958e-307]]
[[1.11259940e-306 1.60220393e-306]
[8.01097889e-307 1.11260144e-306]
[6.89812281e-307 2.22522596e-306]]]
从输出结果可以看出1.如果未在zeros函数中指定生成的数组元素的值类型,默认为float类型。2.使用empty函数生成数组时,此函数返回未初始化的内存,因此可能包含非零的 “垃圾” 值,所以我们仅当打算用数据填充新数组时,才应使用此函数,一般情况下不使用此函数生成占位空数组等。
注意:由于 NumPy 专注于数值计算,因此数据类型(如果未指定)在许多情况下将是 float64(浮点)。
以下表格是一些常用的重要的数组创建函数和说明
函数 | 说明 |
array | 将传入的数据(list、tuple、array或者其他序列类型的数据)转化为ndarray,默认情况下,生成的数组的数据类型为传入的数据类型,或者显示指定数据类型np.array([1, 2, 3], dtype=np.float64),array会复制传入的数据 |
asarray | 将输入的序列类的数据转换为 ndarray,但如果输入的序列已经是 ndarray,则不会复制,相当于引用原来的ndarray |
arange | 与内置的python范围range类似,但返回 ndarray 而不是列表。例如np.arrange(5),返回[0 1 2 3 4] |
ones, ones_like | 生成一个具有给定形状和数据类型的全1的数组;ones_like 采用另一个数组并生成具有相同形状和数据类型的全1的数组,例如: array1 = np.array([[2.1,2.2,2.3,2.4],[1.1,1.2,1.3,1.4]]) array2 = np.ones_like(array1) 则array2输出:[[1. 1. 1. 1.] |
zeros, zeros_like | 与ones,ones_like函数类似,不过生成的是全0数组 |
empty, empty_like | 通过分配新内存来创建新数组,但不填充任何值,类似于ones,ones_like和zeros,zeros_like函数 |
full, full_like | 生成给定形状和数据类型的数组,所有值都设置为指示的 “fill value”;full_like 采用另一个数组并生成具有相同形状和数据类型的填充数组。例如: np.full((2,3), 1) 输出:[[1 1 1] numpy.full(shape, fill_value, dtype=None, order='C') |
eye, identity | 创建一个正方形 N × N 单位矩阵(对角线上为 1,其他位置为 0)。例如 np.eye(5) 输出: [[1. 0. 0. 0. 0.] np.identity(6)输出: [[1. 0. 0. 0. 0. 0.] |