如何解决NumPy:将1D数组转换为0并重塑为2D数组?
如何将以下列表转换为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 ]]
解决方法
这是一种时髦的矢量化方式。我们可以利用基于np.lib.stride_tricks.as_strided
的scikit-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))
,
使用random_walker
循环的正确实现是:
for
应该有一种矢量化方法,并摆脱for循环的效率。任何人都有想法吗?
我发现这则SO帖子相对相似,并且有很多矢量化实现:Sliding window of M-by-N shape numpy.ndarray
,以下为您工作的作品:
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. ]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。