跳转至

Numpy create an array from existing data

本文总阅读量次 ,原创教程,严禁转载

如何从现有数据创建数组

本节介绍切片索引np.vstack()np.hstack()np.hsplit()view()copy()

可以轻松地使用从现有数组的一部分创建新数组。

假设你有一个数组:

>>> a = np.array([1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

通过指定要切片数组的位置,可以随时从数组的某个部分创建新数组。

>>> arr1 = a[3:8]
>>> arr1
array([4, 5, 6, 7, 8])

在这里,您从索引位置3到索引位置8获取了数组的一部分。

还可以垂直和水平堆叠两个现有阵列。假设有两个数组,a1a2

>>> a1 = np.array([[1, 1],
...                [2, 2]])

>>> a2 = np.array([[3, 3],
...                [4, 4]])

可以使用vstack垂直堆叠它们:

>>> np.vstack((a1, a2))
array([[1, 1],
       [2, 2],
       [3, 3],
       [4, 4]])

或用hstack水平堆叠:

>>> np.hstack((a1, a2))
array([[1, 1, 3, 3],
       [2, 2, 4, 4]])

可以使用hsplit将一个数组拆分为几个较小的数组。您可以指定要返回的形状相同的数组的数目,也可以指定在哪些列之后进行切分。

假设你有一个数组:

>>> x = np.arange(1, 25).reshape(2, 12)
>>> x
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]])

如果要将此数组拆分为三个形状相同的数组,请运行:

>>> np.hsplit(x, 3)
[array([[1,  2,  3,  4],
        [13, 14, 15, 16]]), array([[ 5,  6,  7,  8],
        [17, 18, 19, 20]]), array([[ 9, 10, 11, 12],
        [21, 22, 23, 24]])]

如果要在第三列和第四列之后拆分数组,可以运行:

np.hsplit(x, (3, 4))
[array([[1, 2, 3],
        [13, 14, 15]]), array([[ 4],
        [16]]), array([[ 5, 6, 7, 8, 9, 10, 11, 12],
        [17, 18, 19, 20, 21, 22, 23, 24]])]

stacking and splitting 数组更多参考 .

可以使用view方法创建一个新的数组对象,该对象查看的数据与原始数组相同(浅层副本)

view是一个重要的概念!NumPy函数以及索引和切片等操作将尽可能返回视图。这节省了内存,而且速度更快(不需要复制数据)。不过,要注意这一点很重要—在视图中修改数据也会修改原始数组

假设您创建了这个数组:

>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

现在我们通过切片a来创建数组b1,并修改b1的第一个元素。这也将修改a中相应的元素!

>>> b1 = a[0, :]
>>> b1
array([1, 2, 3, 4])
>>> b1[0] = 99
>>> b1
array([99,  2,  3,  4])
>>> a
array([[99,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

使用copy方法将生成数组及其数据的完整副本(深度副本)。要在array上使用此功能,可以运行:

>>> b2 = a.copy()

copies and views 更多参考


NumPy入门系列教程:

NumPy介绍

安装和导入NumPy

Python列表和NumPy数组有什么区别?

什么是array?

有关Array的详细信息

如何创建array

添加、删除和排序元素

数组形状和大小

重塑array

如何将一维array转换为二维array(如何向数组添加新轴)

NumPy索引和切片

如何从现有数据创建数组