Numpy 使用索引和切片时的None用法

Numpy 使用索引和切片时的None用法

在本文中,我们将介绍numpy中使用索引和切片时的None用法。在numpy中,None表示缺少的值或维度,我们可以使用它来操作数组,使我们的代码更加简洁和灵活。

阅读更多:Numpy 教程

None的作用

在numpy数组的索引和切片中,可以使用None来表示缺失的维度或索引。

举个例子,当我们定义一个三维数组时,我们可以使用如下代码:

import numpy as np

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

print(arr.shape)
Python

输出结果为:

(2, 2, 3)
Python

现在,我们想要访问数组的第一个元素,我们可以使用如下代码:

print(arr[0])  # [[1, 2, 3], [4, 5, 6]]
Python

此时,我们获得了一个二维数组,并且还有缺失的维度,这样可以用None来表示:

print(arr[0, None])  # [[[1, 2, 3], [4, 5, 6]]]
Python

从结果可以看到,输出的结果是一个三维数组,缺失的维度已经被None填充。

切片与None的结合使用

在numpy中,我们可以通过切片的方式来访问数组中的元素,同时也可以使用None来扩展数组的维度。综合切片和None的操作,可以使得numpy的数组操作更加灵活。

举个简单的例子,我们定义一个二维数组:

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
Python

现在,我们要将数组的第三行以列的方式拓展为一个二维数组,我们可以使用如下代码:

print(arr[2, None, :])  # [[7, 8, 9]]
Python

从结果可以看到,输出的结果是一个二维数组,我们使用None将第三行的维度扩展了出来,然后使用切片来访问每一列的元素。

此外,当我们在切片中使用None时,它可以表示缺失的维度,也可以表示扩展的维度。比如:

print(arr[:, None, :])  # [[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]
Python

从结果可以看到,输出的结果是一个三维数组,我们使用None在第二维上扩展了维度,表示我们想要访问整个二维数组。

使用None来扩展维度

当我们想要扩展numpy的数组维度时,None是一个非常有用的工具。举个例子,我们可以使用None来将一个一维数组转换为一个二维数组:

x = np.array([1, 2, 3])
print(x.shape)  # (3,)

x = x[:, None]  # 或者 x = x.reshape(-1, 1)
print(x.shape)  # (3, 1)
Python

从结果可以看到,我们使用None将x的维度扩展到第二维上,转化为了一个二维数组,可以在机器学习中使用。

此外,当我们想要将两个数组拼接在一起时,也可以使用None来扩展维度。

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

a = a[:, None]
b = b[:, None]

c = np.concatenate([a, b], axis=1)
print(c)  # [[1, 4],
 [2, 5],
 [3, 6]]
Python

从结果可以看到,我们使用None将a和b的维度扩展到第二维上,然后在第二维上进行拼接,获得了一个二维数组。

总结

在numpy中,None是一个非常有用的工具,可以用来扩展数组的维度,表示缺失的维度或索引,使得代码更加简洁和灵活。在使用索引和切片时,None的结合使用也可以使得numpy的操作更加高效和灵活。应该在numpy的学习过程中多加利用None这个工具。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册