我有一个大的numpy 3d数组(10000,3,3).其中我想找到每个区域的中心坐标(具有相同数字的簇).每个子阵列可以具有1,2,3或4个区域.
我的数组的一个子集是:
largearray= array([[[1, 0, 0],
[0, 0, 2],
[3, 0, 2]],
[[0, 0, 4],
[0, 0, 4],
[0, 0, 4]],
[[5, 0, 0],
[5, 0, 6],
[0, 6, 6]],
[[7, 0, 8],
[0, 0, 0],
[9, 0,10]]])
我想要的输出是子阵列的位置以及代表中心的x和y坐标:
#output:
array([[ 0., 0., 0.],
[ 0., 1.5, 2.],
[ 0., 2., 0.],
[ 1., 1., 2.],
[ 2., 0.5, 0.],
[ 2., 1.66666667, 1.66666667],
[ 3., 0., 0.],
[ 3., 0., 2.],
[ 3., 2., 0.],
[ 3., 2., 2.]])
我对其他输出持开放态度,但这样的话会很棒!
提前致谢!
解决方法:
使用numpy_indexed软件包中的功能(免责声明:我是它的作者),可以构建一个完全矢量化的解决方案(即,没有for循环):
import numpy_indexed as npi
idx = np.indices(largearray.shape).reshape(largearray.ndim, largearray.size)
label, mean = npi.group_by(largearray, axis=None).mean(idx, axis=1)
对于大输入,这应该更有效.
请注意,如果标签在每个子阵列中不是唯一的(它们似乎在您的示例中,但未明确说明),但您仍然希望仅采用每个子阵列的平均值,您可以简单地写下:
(label, subarr), mean = npi.group_by((largearray.flatten(), idx[0])).mean(idx[1:], axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。