python - 将 2D 矩阵的分布向量化为 3D 矩阵
问题描述
我有一个K
形状为 (j, k) 的 2D 矩阵,我想通过根据与新的第一个维度匹配的Q
另一个向量d
(长度 i)分配向量来将其转换为 3D 矩阵。
我已经用循环完成了,但是该例程被调用了几次,整个过程花费了太长时间:
def shift(self, arr, num, init):
result = np.zeros((arr.shape[0], arr.shape[1]), dtype=np.int32)
offset = num + init
result[offset:,:] = arr[:-offset,:]
return result
q = np.zeros((i, j, k), dtype=np.int32)
q[0,:,:] = K
for i in range(len(d)):
q[:, i, :] = shift(q[:, i, :], int(d[i]))
这里基本上我将初始矩阵复制K
到 3D 矩阵的第一个维度的第一个元素中,该元素Q
是使用np.zeros
和最终维度创建的(d.shape + K.shape)
,然后我为维度 2 中的每个元素“推送”向量中的位置数d
。
有什么想法可以避免这种 for 循环吗?
解决方案
对于您评论中的情况:
In [853]: v = [4, 6, 3, 8]; d = [9, 2, 3, 1]
In [865]: q = np.zeros((10,4), int)
In [866]: q[d,np.arange(4)]=v
In [867]: q
Out[867]:
array([[0, 0, 0, 0],
[0, 0, 0, 8],
[0, 6, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[4, 0, 0, 0]])
推荐阅读
- python - 用于重启 ec2 实例的 aws lambda python 函数不起作用
- angular - 离子错误(无法获取 /)
- r - 合并循环的输出
- python - 一行代码设置一整列的值
- python - 如何修补“python --version”命令?
- c - 将虚拟盖子关闭开关添加到 Windows 以进行测试
- azure - 无法使用专用终结点将 Azure Function 与 Azure SQL 连接
- android - Flutter - 动画师的问题
- laravel - 根据laravel中的当前路由名称在同一表单中欺骗不同的方法
- java - 覆盖子类实体中@MappedSuperclass 的继承属性(例如继承关系表名、列名...等)