- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有以下 numpy 数组:
c = array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
X = array([[10, 15, 20, 5],
[ 1, 2, 6, 23]])
y = array([1, 1])
我正在尝试将 X
数组中的每个 1x4
行添加到 c
中的列之一。 y
数组指定了哪一列。上面的示例意味着我们将 X
数组中的两行添加到 c 的 1
列。也就是说,我们应该期待以下结果:
c = array([[ 1, 2+10+1, 3], = array([[ 1, 13, 3],
[ 4, 5+15+2, 6], [ 4, 22, 6],
[ 7, 8+20+6, 9], [ 7, 34, 9],
[10, 11+5+23, 12]]) [10, 39, 12]])
有谁知道我如何在没有任何循环的情况下做到这一点?我尝试了 c[:,y] += X
但它似乎只将 X
的第二行添加到 的
一次。话虽如此,需要注意的是,1
列>cy
不一定是[1,1]
,也可以是[0,1]
。在这种情况下,我们将 X
的第一行添加到 c
的 0
列和 X
的第二行> 到 c
的 1
列。
最佳答案
当我看到您想要的计算时,我的第一个想法是对 X
的两行求和,并将其添加到 c
的第二列:
In [636]: c = array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [637]: c[:,1]+=X.sum(axis=0)
In [638]: c
Out[638]:
array([[ 1, 13, 3],
[ 4, 22, 6],
[ 7, 34, 9],
[10, 39, 12]])
但是如果我们想从像 y
这样的一般索引开始工作, 我们需要一个特殊的 bufferless
操作 - 即如果 y
中有重复项:
In [639]: c = array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [641]: np.add.at(c,(slice(None),y),X.T)
In [642]: c
Out[642]:
array([[ 1, 13, 3],
[ 4, 22, 6],
[ 7, 34, 9],
[10, 39, 12]])
你需要查找.at
在 numpy 文档中。
在 Ipython 中 add.at?
向我展示了包含以下内容的文档:
Performs unbuffered in place operation on operand 'a' for elements specified by 'indices'. For addition ufunc, this method is equivalent to
a[indices] += b
, except that results are accumulated for elements that are indexed more than once. For example,a[[0,0]] += 1
will only increment the first element once because of buffering, whereasadd.at(a, [0,0], 1)
will increment the first element twice.
与不同y
它仍然有效
In [645]: np.add.at(c,(slice(None),[0,2]),X.T)
In [646]: c
Out[646]:
array([[11, 2, 4],
[19, 5, 8],
[27, 8, 15],
[15, 11, 35]])
关于python - 矢量化 - 添加没有循环的 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846676/
我是一名优秀的程序员,十分优秀!