Numpy中的(N,)和(N,1)有什么区别

Numpy中的(N,)和(N,1)有什么区别

在本文中,我们将介绍Numpy中的两个向量表示形式:(N,)和(N,1)。这两种表示方式会导致不同的计算结果,因此理解它们之间的区别非常重要。

阅读更多:Numpy 教程

(N,)的表示方式

(N,)向量是一维的。它包含N个元素。例如,下面的代码创建一个(3,)向量:

import numpy as np
a = np.array([1, 2, 3])
print(a.shape)    #(3,)
Python

在(N,)表示方式下,向量的维数为1,因此它不能与二维矩阵进行运算。例如,下面的代码将会抛出一个错误:

b = np.array([[1, 2], [3, 4], [5, 6]])
c = a + b    # 报错
Python

因此,为了避免这种错误,当我们将一个(N,)向量与矩阵相加时,必须使用reshape函数将其转换为(1,N)的形式。例如:

b = np.array([[1, 2], [3, 4], [5, 6]])
a_reshaped = a.reshape((1,3))
print(a_reshaped)   # [[1 2 3]]
c = a_reshaped + b
print(c)
Python

代码的输出为:

[[1 2 3]]
[[2 4]
 [6 8]
 [10 12]]
Python

这是因为,将(N,)向量转换为(1,N)的形式时,其维数变为2,因此可以与矩阵进行运算。

(N,1)的表示方式

(N,1)向量是二维的,包含N行和1列。例如,下面的代码创建了一个(3,1)向量:

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

在(N,1)表示方式下,向量的维数为2,因此它可以与矩阵进行运算。例如,下面的代码将(N,1)向量与矩阵相乘:

e = np.array([[1, 2], [3, 4], [5, 6]])
f = d.dot(e)
print(f)
Python

代码的输出为:

[[22 28]]
Python

这是因为,将(N,1)向量与矩阵相乘等同于将一个列向量与一个矩阵相乘。

区别

由于(N,)向量是一维的,因此它不能与矩阵相乘。此外,与(N,1)向量相加时,不需要使用reshape函数。

例如,下面的代码将(N,)向量与(N,1)向量相加,不需要进行转换:

g = np.array([1, 2, 3])
h = np.array([[4], [5], [6]])
i = g + h
print(i)
Python

代码的输出为:

[[5 6 7]
 [6 7 8]
 [7 8 9]]
Python

总结

Numpy中的(N,)和(N,1)向量表示方式之间的区别很重要。只有理解它们之间的区别,才能正确地进行矩阵计算。在使用时,需要注意不同表示方式之间的差异,以确保代码的正确性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册