gpt4 book ai didi

python - 移动 numpy 向量 n 次并创建一个矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:54 26 4
gpt4 key购买 nike

我正在寻找一种方法来将长度为 n, n-1 的 np.array 移动并创建移动向量矩阵。

例如,如果这是我的矢量:

[1,4,7,8]

我想得到的是:

[[None, None, None],
[1 , None, None],
[4 , 1 , None],
[7 , 4 , 1 ]]

我可以使用 for 循环和 shift 轻松完成,但我想知道是否有更有效的方法使用内置 numpy 功能。

最佳答案

这是一个带有 np.lib.stride_tricks.as_strided 的 -

def shifted_subarrays(a, fill=None):
a = np.asarray(a)
fillar = np.full(len(a)-1, fill)
a_ext = np.concatenate((fillar,a))
n = len(a)
s = a_ext.strides[0]
strided = np.lib.stride_tricks.as_strided
return strided(a_ext[len(a)-2:], shape=(n,n-1), strides=(s,-s))

sample 运行-

In [20]: a = [1,4,7,8]

In [21]: shifted_subarrays(a)
Out[21]:
array([[None, None, None],
[1, None, None],
[4, 1, None],
[7, 4, 1]], dtype=object)

In [46]: shifted_subarrays(a, fill=np.nan)
Out[46]:
array([[nan, nan, nan],
[ 1., nan, nan],
[ 4., 1., nan],
[ 7., 4., 1.]])

一个更简单的 toeplitz -

from scipy.linalg import toeplitz
out = toeplitz(a,[None]*(len(a)))[:,1:]

关于python - 移动 numpy 向量 n 次并创建一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53191556/

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