【发布时间】:2019-09-21 11:36:28
【问题描述】:
我有一个二维数组值,A。我想围绕一维数组给出的索引对该数组中的值进行窗口化,b。
import numpy as np
A = np.random.randint(1000, size=(100, 100))
b = np.random.randint(40,60, size=(100))
window = A[b[:]-10 : b[:]+10, :]
但是,运行此程序时,我收到以下错误:
TypeError:只有 size-1 的数组可以转换为 Python 标量
我尝试使用预分配我的窗口数组,但得到相同的错误。我试图避免使用 for 循环并执行此向量化。
基本上我想为 b 周围的 20 行窗口中的每一列获取 A 的值。
print(b[:]-10,:)
给予:
[47 40 46 30 42 36 48 33 37 41 49 31 41 40 39 48 39 48 42 37 48 37 31 32 49 43 32 39 45 41 30 48 30 46 31 39 48 44 36 30 40 45 47 34 49 46 41 43 30 38 31 35 42 48 49 42 32 33 42 48 48 39 31 32 45 39 36 49 31 44 48 30 33 47 33 48 36 38 42 30 49 43 41 34 39 49 39 45 42 38 39 45 47 40 46 35 41 39 47 38]
print(b[:]+10,:)
给予:
[67 60 66 50 62 56 68 53 57 61 69 51 61 60 59 68 59 68 62 57 68 57 51 52 69 63 52 59 65 61 50 68 50 66 51 59 68 64 56 50 60 65 67 54 69 66 61 63 50 58 51 55 62 68 69 62 52 53 62 68 68 59 51 52 65 59 56 69 51 64 68 50 53 67 53 68 56 58 62 50 69 63 61 54 59 69 59 65 62 58 59 65 67 60 66 55 61 59 67 58]
我想创建一个新的二维数组,用于保存此行窗口中来自 A 的值。
【问题讨论】:
-
你想用
b[:]-50 : b[:]+50做什么?尝试打印b[:]-50和b[:]+50。您将看到超出 A 的索引的数字。在此类问题中,有一些示例输入和输出有助于读者的时间兴趣。否则,它会浪费读者大量时间试图解释和破译你想要的东西。请阅读How to create a Minimal, Complete, and Verifiable example -
“窗口”是什么意思?你能告诉我们你的预期结果吗?
-
关于您的评论,“您的解决方案似乎使事情过于复杂。这应该不会太难。”:不,它没有;是的,不是。
-
这对@brandomtober 有帮助吗?不要忘记提供一些反馈,请参阅What should I do when someone answers my question?
标签: python numpy indexing vectorization