如何在Python中定义含任意s个分量的列单位向量v=(0,…,0,1)
生成指定维度的末尾为1的列向量
给你几种用numpy实现的方案,完全支持任意正整数s:
方法1:直接初始化列向量并修改末尾元素
最直观的方式,先创建s行1列的全0数组,再把最后一个元素设为1:
import numpy as np s = 5 # 替换成你需要的任意正整数 v_col = np.zeros((s, 1)) v_col[-1] = 1
这样得到的v_col就是形状为(s, 1)的列向量,完全符合需求。
方法2:先做一维数组再转列向量
如果习惯先处理一维数组,再转换成列向量:
import numpy as np s = 5 v = np.zeros(s) v[-1] = 1 # 两种转列向量的方式二选一 v_col = v.reshape(-1, 1) # 或者更简洁的写法 v_col = v[:, None]
reshape(-1, 1)中的-1表示让numpy自动计算该维度的长度,[:, None]则是通过增加一个新轴来把一维数组转成列向量。
方法3:利用单位矩阵快速生成
numpy的np.eye()可以生成单位矩阵,直接取最后一列就能得到目标列向量:
import numpy as np s = 5 v_col = np.eye(s)[:, -1].reshape(-1, 1)
np.eye(s)生成s×s的单位矩阵,[:, -1]取矩阵的最后一列(此时是一维数组),再转成列向量即可。
如果你的计算场景允许使用一维数组(numpy的广播机制大多能兼容),那直接用v = np.zeros(s); v[-1] = 1也完全没问题,不用转成列向量。
内容的提问来源于stack exchange,提问作者sakabukayo
相关产品推荐
相关产品推荐

