gpt4 book ai didi

python:独立移动张量内的每个矩阵

转载 作者:行者123 更新时间:2023-12-04 00:57:10 24 4
gpt4 key购买 nike

这个问题对于矩阵非常相似Roll rows of a matrix independently

但我没能将其调整为 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 solution来自同一个链接的性能问答 -

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)

sample 运行-

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]

关于python:独立移动张量内的每个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61466539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com