gpt4 book ai didi

python - 逐元素添加一维和二维 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 22:30:45 24 4
gpt4 key购买 nike

情况

我的对象具有由 numpy 数组表示的属性:

>> obj = numpy.array([1, 2, 3])

其中 123 是属性的值。

我将要编写一些方法,它们应该对单个对象和一组对象同样有效。一组对象由一个二维 numpy 数组表示:

>>> group = numpy.array([[11, 21, 31],
... [12, 22, 32],
... [13, 23, 33]])

其中第一个数字表示对象,第二个数字表示属性。即 12 是对象 1 的属性 2,21 是对象 2 的属性 1。

为什么这样而不是转置?因为我希望数组索引对应于属性。也就是说,object_or_group[0] 应该将第一个属性生成为单个数字或 numpy 数组,以便它可以用于进一步的计算。

好吧,所以当我想计算点积时,这个开箱即用:

>>> obj = numpy.array([1, 2, 3])
>>> obj.dot(object_or_group)

元素加法不起作用。

输入:

>>> group
array([[1, 2, 3],
[4, 5, 6]])
>>> obj
array([10, 20])

结果数组应该是 group 的第一个元素和 obj 的总和,第二个元素类似:

>>> result = numpy.array([group[0] + obj[0],
... group[1] + obj[1]])
>>> result
array([[11, 12, 13],
[24, 25, 26]])

但是:

>>> group + obj
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,3) (2,)

考虑到 numpy 的 broadcasting rules 是有意义的.

似乎没有沿指定轴执行加法(或等效广播)的 numpy 函数。虽然我可以使用

>>> (group.T + obj).T
array([[11, 12, 13],
[24, 25, 26]])

这感觉很麻烦(如果我认为单个对象而不是一组,这确实感觉不对)。特别是因为 numpy 涵盖了其用法的每一个角落案例,我觉得我在这里可能在概念上犯了一些错误。

总结一下

类似于

>>> obj1
array([1, 2])
>>> obj2
array([10, 20])
>>> obj1 + obj2
array([11, 22])

(执行元素级或属性级加法)我想对对象组执行相同的操作:

>>> group
array([[1, 2, 3],
[4, 5, 6]])

而此类二维组数组的布局必须使单个对象沿第二个轴 (axis=1) 列出,以便能够请求某个属性(或多个属性) ) 通过正常索引:obj[0]group[0] 都应该产生第一个属性。

最佳答案

你想做的事情似乎可以用这个简单的代码来实现!!

>>> m
array([[1, 2, 3],
[4, 5, 6]])
>>> g = np.array([10,20])
>>> m + g[ : , None]
array([[11, 12, 13],
[24, 25, 26]])

关于python - 逐元素添加一维和二维 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com