如何在NumPy中传入向量生成多矩阵(不使用循环)
解决方案
可以利用NumPy的向量化操作和广播机制来实现,完全避免显式for循环,代码如下:
import numpy as np def func(m): m_arr = np.asarray(m) # 创建形状为 (N, 3, 3) 的全零三维数组,N是输入序列的长度 matrices = np.zeros((m_arr.size, 3, 3)) # 批量为每个矩阵的(1,1)位置赋值 matrices[:, 1, 1] = 2 * m_arr return matrices # 测试标量输入 print("标量输入结果:") print(func(2)) # 测试数组输入 print("\n数组输入生成的3个矩阵:") for mat in func([1,2,3]): print(mat)
关键说明:
- 先将输入
m转为NumPy数组,兼容标量和序列两种输入场景; - 初始化的三维数组
matrices形状为(N,3,3),其中N是输入序列的长度,每个(3,3)切片对应一个目标矩阵; - 通过
matrices[:,1,1]可以选中所有矩阵的第1行第1列位置(NumPy索引从0开始),直接赋值2*m_arr利用广播完成批量操作,这比显式循环效率高得多。
原代码报错原因:
原函数中M是二维数组(3,3),M[1,1]是单个标量位置,无法接受序列类型的赋值,而三维数组的设计可以让我们批量处理多个矩阵的对应位置。
内容的提问来源于stack exchange,提问作者Silviu
相关产品推荐
相关产品推荐

