午夜过后,也许有人知道如何解决我的问题。我想将相邻单元格的数量(这意味着具有其他值的数组字段的数量,例如数组值附近的零)作为 每个有效值的 总和
! 。
例:
import numpy, scipy
s = ndimage.generate_binary_structure(2,2) # Structure can vary
a = numpy.zeros((6,6), dtype=numpy.int) # Example array
a[2:4, 2:4] = 1;a[2,4] = 1 # with example value structure
print a
>[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 1 1 1 0]
[0 0 1 1 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
# The value at position [2,4] is surrounded by 6 zeros, while the one at
# position [2,2] has 5 zeros in the vicinity if 's' is the assumed binary structure.
# Total sum of surrounding zeroes is therefore sum(5+4+6+4+5) == 24
如果我的值的结构变化,我如何以这种方式计算零的数量?我以某种方式认为必须使用SciPy的binary_dilation函数,该函数能够扩大值结构,但是对重叠的简单计数不能使我得出正确的总和?
print ndimage.binary_dilation(a,s).astype(a.dtype)
[[0 0 0 0 0 0]
[0 1 1 1 1 1]
[0 1 1 1 1 1]
[0 1 1 1 1 1]
[0 1 1 1 1 0]
[0 0 0 0 0 0]]
使用 卷积 计算邻居数:
import numpy
import scipy.signal
a = numpy.zeros((6,6), dtype=numpy.int) # Example array
a[2:4, 2:4] = 1;a[2,4] = 1 # with example value structure
b = 1-a
c = scipy.signal.convolve2d(b, numpy.ones((3,3)), mode='same')
print numpy.sum(c * a)
b = 1-a
允许我们计算每个零而忽略它们。
我们使用一个3x3全为内核,将每个元素设置为其元素与它的8个相邻值的和(其他内核也是可能的,例如+
仅正交相邻值的内核)。使用这些求和的值,我们屏蔽了原始输入中的零(因为我们不在乎它们的邻居),并对整个数组求和。
有没有一种方法可以在小于O(n^2)的时间内做到这一点。 O(nlogn)还是O(n)?
我知道强力解O(n^2),我想要另一个解O(n),还是O(n,log,n)?
问题内容: 我有一个numpy数组,其中包含: 我想创建一个包含以下内容的数组: 也就是说,我想将第一个元素添加到数组的末尾。 我尝试了明显的方法: 但我说错了 我不明白这一点-数组都是一维数组。 问题答案: 创建一个新数组,该数组可以是带有附加元素的旧数组。 我认为使用适当的方法添加元素更为正常:
问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子
问题内容: 我有一个二维数组,即序列数组也是数组。对于每个序列,我想计算自相关,因此对于(5,4)数组,我将获得5个结果或维度为(5,7)的数组。 我知道我可以循环浏览第一个维度,但这很慢,也是我的最后选择。还有另一种方法吗? 谢谢! 编辑: 根据选择的答案以及mtrw的评论,我具有以下功能: 请注意,在我的代码中,length是一个全局变量,因此一定要声明它。我也没有将结果限制为实数,因为我还需
问题内容: 我试图将2D数组中的每个项乘以1D数组中的相应项。如果我想将每一列乘以一维数组,这非常容易,如numpy.multiply函数所示。但是我想相反,将行中的每一项相乘。换句话说,我想乘以: 并得到 但是我得到了 有谁知道用numpy可以做到这一点吗?非常感谢Alex 问题答案: 像您显示的正常乘法: 如果添加轴,它将使您所需的方式成倍增加: 您还可以移调两次: