python - python:独立地移动张量内的每个矩阵
问题描述
这个问题与矩阵非常相似独立滚动矩阵的行
但我无法适应 3D 张量
我得到一个张量
0 0 0
1 1 1
0 0 0
0 0 0
1 1 1
0 0 0
和一个向量,它指定我想按列移动矩阵的程度
1 2
我想要一个新的张量,其中每个矩阵都像这样按列移动
0 0 0
0 0 0
1 1 1
1 1 1
0 0 0
0 0 0
到目前为止,我已经能够获得潜在的映射索引
import numpy as np
# Input
A = np.array([[0, 0, 0],
[1, 1, 1],
[0, 0, 0],
[0, 0, 0]])
B = np.array([[0, 0, 0],
[1, 1, 1],
[0, 0, 0],
[0, 0, 0]])
AB = np.array([A, B])
# Shifting amount
r = np.array([-1, 1])
d1, d2, d3 = np.ogrid[:AB.shape[0], :AB.shape[1], :AB.shape[2]]
r[r < 0] += AB.shape[1]
r = np.array([r, ]*AB.shape[1]).transpose()
r = r[:, np.newaxis]
# New column indices?
d2 = d2 - r
d2[d2 < 0] += AB.shape[1]
result = AB[d2]
print(result)
但我得到这个错误:
~/Work/ethz/iml/task2 $ python test.py
Traceback (most recent call last):
File "test.py", line 27, in <module>
result = AB[d2]
IndexError: index 2 is out of bounds for axis 0 with size 2
这d2
看起来像:
[[[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[0 0 0 0]]
[[3 3 3 3]
[0 0 0 0]
[1 1 1 1]
[2 2 2 2]]]
解决方案
方法#1
从相同的链接问答中调整strided-based
解决方案以提高性能 -
from skimage.util.shape import view_as_windows
def roll_along_second_axis_3dar(a, r):
r = np.asarray(r)
a_ext = np.concatenate((a,a[:,:-1,:]),axis=1)
n = a.shape[1]
idx = (n-r)%n
w = view_as_windows(a_ext,(1,n,1))[...,0,:,0]
return w[np.arange(len(idx)),idx].swapaxes(1,2)
样品运行 -
In [11]: a
Out[11]:
array([[[44, 47, 64],
[67, 67, 9],
[83, 21, 36],
[87, 70, 88]],
[[88, 12, 58],
[65, 39, 87],
[46, 88, 81],
[37, 25, 77]]])
In [12]: roll_along_second_axis_3dar(a, r=[-1,1])
Out[12]:
array([[[67, 67, 9],
[83, 21, 36],
[87, 70, 88],
[44, 47, 64]],
[[37, 25, 77],
[88, 12, 58],
[65, 39, 87],
[46, 88, 81]]])
方法#2
与你的尝试一起,似乎你已经足够接近了。我们可以通过少量修改/更正得到最终输出 -
d1, d2, d3 = np.ogrid[:AB.shape[0], :AB.shape[1], :AB.shape[2]]
r[r < 0] += AB.shape[1]
D2 = ((d2 - r).transpose(2,1,0))%AB.shape[1]
out = AB[d1,D2,d3]
推荐阅读
- java - 如何使用 JAXB 解组?
- healpy - 将笛卡尔投影(带球坐标)中的地图转换为 helix 投影
- azure - 将带有逗号小数分隔符的 CSV 复制到 SQL Server
- .net - Angular .Net DLL 可能的集成
- c# - Serilog 不写入文件(.net core 2.2)
- angular - nouislider with angular2 - set 不是一个函数
- mysql - 根据条件过滤 SQL 表
- javascript - 从静态文件夹获取图像文件并在客户端应用程序中显示它们
- xcode - xcode 10 调试器在某些断点上停止,而在其他一些断点上停止
- r - “模型”对象在 R Keras 多 GPU 模型中没有属性“predict_classes”