我有一个Numpy 3轴数组,它的元素是3维的。我想求它们的平均值,并返回数组的相同形状。普通的average函数删除3维,并将其替换为平均值(正如预期的那样):
a = np.array([[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]],
[[0.4, 0.4, 0.4], [0.7, 0.6, 0.8]]], np.float32)
b = np.average(a, axis=2)
# b = [[0.2, 0.3],
# [0.4, 0.7]]
字符串
结果必填:
# b = [[[0.2, 0.2, 0.2], [0.3, 0.3, 0.3]],
# [[0.4, 0.4, 0.4], [0.7, 0.7, 0.7]]]
型
你能优雅地完成这个操作吗,还是我必须在Python中迭代数组(与功能强大的Numpy函数相比,这要慢得多)。
你能把np.mean函数的Dtype参数设为一个1D数组吗?
谢谢.
6条答案
按热度按时间nhn9ugyo1#
好吧,警告我还没有掌握钱币学,但只是玩玩,我想出了:
字符串
hc8w905p2#
你考虑过使用广播吗?Here是关于广播的更多信息,如果你是新的概念。
下面是一个使用
broadcast_arrays
的例子,请记住,broadcast_arrays
在这里产生的b
应该被视为只读,如果你想写它,你应该做一个副本:字符串
nwo49xxi3#
字符串
6kkfgxo04#
下面是一个避免复制的方法:
字符串
或者如果你不想覆盖
a
:型
6kkfgxo05#
这是一个任意轴:
array
是n维数组,axis
是平均轴字符串
i2byvkas6#
您可以在
numpy.mean
中使用keepdims=True
来保留原始尺寸:keepdims:*bool,可选 *
如果此设置为True,则减小的轴将作为尺寸为1的维留在结果中。使用此选项,结果将根据输入数组正确广播。
如果传递了默认值,那么keepdims将不会传递给ndarray的子类的mean方法,但是任何非默认值都会传递。如果子类的方法没有实现keepdims,则会引发任何异常。
这已经解决了许多广播情况。但是,如果你需要相同的形状,你可以使用
np.broadcast_to
:字符串
输出量:
型