NumPy:将1D数组转换为0并重塑为2D数组?

时间:2020-10-26 08:40:15

标签: python numpy numpy-ndarray

如何将以下列表转换为0并将其重塑为2D数组?

# original list 
[1, 0.96, 0.92, 0.88]

# 2D Array
[[1     0     0     0   ]
 [0.96  1     0     0   ]
 [0.92  0.96  1     0   ]
 [0.88  0.92  0.96  1   ]]

3 个答案:

答案 0 :(得分:4)

这是一种时髦的矢量化方式。我们可以利用基于np.lib.stride_tricks.as_stridedscikit-image's view_as_windows来获取滑动窗口视图并加以解决。

from skimage.util.shape import view_as_windows

# a is input array (convert to array with np.array() is input is list)
p = np.r_[a[::-1], np.zeros(len(a)-1, dtype=a.dtype)]
out = view_as_windows(p,len(a))[::-1]

或者,将其保留为NumPy-

m = len(a)
n = p.strides[0]
out = np.lib.stride_tricks.as_strided(p[m-1:], shape=(m,m), strides=(-n,n))

答案 1 :(得分:2)

使用random_walker循环的正确实现是:

for

应该有一种矢量化方法,并摆脱for循环的效率。任何人都有想法吗?

我发现这则SO帖子相对相似,并且有很多矢量化实现:Sliding window of M-by-N shape numpy.ndarray

答案 2 :(得分:1)

以下为您工作的作品:

import numpy as np 

arr = np.array([1, 0.96, 0.92, 0.88])

arr_cp = np.zeros((arr.shape[0], arr.shape[0]))

for i in range(arr.shape[0]):
  arr_cp[i][:i+1] = np.flip(arr[:i+1])

print(arr_cp)

输出:

[[1.   0.   0.   0.  ]
 [0.96 1.   0.   0.  ]
 [0.92 0.96 1.   0.  ]
 [0.88 0.92 0.96 1.  ]]