Tam*_*mes 1 python numpy vectorization
我有一个二维矩阵
M = np.array([[0.5+t, 1, 1],
[0.5, 0.5, t],
[0.5, 1-t, 0.5]])
Run Code Online (Sandbox Code Playgroud)
我想为 $t$ 的几个值计算该矩阵的一些属性。我可以用 for 循环来做到这一点,但我想知道是否有一种方法可以不用循环来做到这一点。例如,创建一个 3d 数组,其中该数组的每个幻灯片都是一个 2d 数组,其中包含给定 t 的矩阵 M。
循环实现将是这样的。
import numpy as np
def M(t: float):
return np.array([[0.5+t, 1, 1], [0.5, 0.5, t], [0.5, 1-t, 0.5]])
t_vec = np.linspace(0, 1, num=100)
norm = np.zeros_like(t_vec)
for i, t in enumerate(t_vec):
matrix = M(t)
norm[i] = np.linalg.norm(matrix)
Run Code Online (Sandbox Code Playgroud)
在本例中,我想计算矩阵的 2 范数并将所有值存储在数组中。
我建议使用 2 个数组,一个用于 M,一个用于t:
M = np.array([[0.5, 1.0, 1.0],
[0.5, 0.5, 0.0],
[0.5, 1.0, 0.5]])
t = np.array([[1, 0, 0],
[0, 0, 1],
[0, -1, 0]])
Run Code Online (Sandbox Code Playgroud)
然后:
M+t
M+t*2
# etc.
Run Code Online (Sandbox Code Playgroud)
或者,以矢量方式:
t_vec = np.linspace(0, 1, num=100)
out = M+t*t_vec[:,None,None]
norm = np.linalg.norm(M, axis=(1, 2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |