📜  numpy 数组和矩阵的区别 - CSS (1)

📅  最后修改于: 2023-12-03 15:03:19.086000             🧑  作者: Mango

Numpy 数组和矩阵的区别

Numpy 是一个Python科学计算的重要库,它提供了一种数组类型ndarray,也提供了一个矩阵类型matrix。虽然两者看起来很相似,但它们之间确有一些重要的区别。

数组 ndarray

ndarray 是 Numpy 库中最基本的对象,是一个多维数组对象。它有以下的特点:

  • 数组的元素类型必须相同(例如,所有的元素都是整数或浮点数);
  • 数组的大小是固定的,不能动态更改;
  • 数组中每一维的大小也是固定的,但它们可以是不同的。

下面是如何创建一个 ndarray 对象,并向其中添加一些数据:

import numpy as np

# 创建一个 2x3 的二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)

# 输出:
# [[1 2 3]
#  [4 5 6]]
矩阵 matrix

matrix 是一个二维的数组的特殊类型,它有以下的特点:

  • 矩阵的元素类型必须是相同的,通常是浮点数或复数;
  • 矩阵的大小是固定的,不能动态更改;
  • 矩阵使用“ @ ”运算符来表示乘法操作。

下面是如何创建一个 matrix 对象,并向其中添加一些数据:

import numpy as np

# 创建一个 2x3 的矩阵
a = np.matrix([[1, 2, 3], [4, 5, 6]])
print(a)

# 输出:
# [[1 2 3]
#  [4 5 6]]

注意:矩阵的创建方式和数组非常相似,但是在矩阵中使用逗号来分隔行,而不是数组中使用中括号。

数组和矩阵的区别

虽然 ndarray matrix 看起来很相似,但在功能和用法上有很多区别:

1. 维数

ndarray 对象可以有任意多维,而 matrix 则是二维的,它只能处理矩阵运算。

2. 乘法运算

ndarray 对象支持元素级别的乘法(也被称为Hadamard乘积),而 matrix 对象支持矩阵乘法运算。

# 数组的乘法
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
c = a * b
print(c)

# 输出:
# [[ 7 16 27]
#  [40 55 72]]

# 矩阵的乘法
a = np.matrix([[1, 2, 3], [4, 5, 6]])
b = np.matrix([[7, 8], [9, 10], [11, 12]])
c = a @ b
print(c)

# 输出:
# [[ 58  64]
#  [139 154]]
3. 转置

ndarray 对象可以使用 T 属性进行矩阵的转置,而 matrix 对象则可以使用特殊的 T() 方法进行转置。

# 数组的转置
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.T
print(b)

# 输出:
# [[1 4]
#  [2 5]
#  [3 6]]

# 矩阵的转置
a = np.matrix([[1, 2, 3], [4, 5, 6]])
b = a.T()
print(b)

# 输出:
# [[1 4]
#  [2 5]
#  [3 6]]
总结
  • ndarray 是 Numpy 库中最基本的对象,是一个多维数组对象,可以有任意多维;
  • matrix 是一个二维的数组的特殊类型,它只能处理矩阵运算,支持矩阵乘法运算;
  • ndarray 对象支持元素级别的乘法,而 matrix 对象不支持;
  • 虽然两者看起来很相似,但在功能和用法上有很多区别;因此,选择应根据具体的任务需求来决定。