你没有给出任何数字或实例,因此我只举了一个小小小小小例子(如果你没有实际工作的话,就不得不告诉我)。
Consider the following:
import numpy as np
nseqs = 4
seq_length = 5
seq = np.arange(nseqs*seq_length).reshape(nseqs, seq_length)
从内部通道开始,我们可以通过广播实现同样的目标。
output = np.empty((nseqs, seq_length, seq_length))
for n in range(nseqs):
output2[n] = seq[n,None]
output[n, :, :] *= output[n, :, :].T
Now, the multiplication doesn t actually affect the subsequent loops, so we can split this into two loops.
output = np.empty((nseqs, seq_length, seq_length))
for n in range(nseqs):
output2[n] = seq[n,None]
for n in range(nseqs):
output[n, :, :] *= output[n, :, :].T
从第一波段播放的节目只是重复每个次马基里的seq[n]
的内容,因此,我们能够利用>>np.repeat
。
output = np.repeat(seq[:,None], seq_length, axis=1)
第二处是代号:代号:<>output[n]乘以代号。 可使用https://numpy.org/doc/stable/vis/generated/numpy.swapaxes.html” rel=“nofollow noreferer”np.swapaxes
<>, swapping the final two axes (i.e. exercise the transpose of the submatrices)。
output *= np.swapaxes(output, 1, 2)
最后,你的法典削减到:
output = np.repeat(seq[:,None], seq_length, axis=1)
output *= np.swapaxes(output, 1, 2)