此脚本创建一个数组b的索引和给定数组a的值,这在例如将2.5D高度图转换为点云时很有用:
b
a
import numpy as np a = np.arange(12).reshape(3, 4) b = np.array([[*i, val] for i, val in np.ndenumerate(a)]) print(b)
个字符有没有一种纯NumPy的方式,即没有循环,来做同样的事情?
kjthegm61#
许多可能的方法之一:
In [129]: np.hstack((np.argwhere(np.ones((3,4))),np.arange(12)[:,None])) Out[129]: array([[ 0, 0, 0], [ 0, 1, 1], [ 0, 2, 2], [ 0, 3, 3], [ 1, 0, 4], [ 1, 1, 5], [ 1, 2, 6], [ 1, 3, 7], [ 2, 0, 8], [ 2, 1, 9], [ 2, 2, 10], [ 2, 3, 11]], dtype=int64)
字符串另一个:
In [144]: arr = np.concatenate((np.mgrid[:3,:4],np.arange(12).reshape(1,3,4))) In [145]: arr Out[145]: array([[[ 0, 0, 0, 0], [ 1, 1, 1, 1], [ 2, 2, 2, 2]], [[ 0, 1, 2, 3], [ 0, 1, 2, 3], [ 0, 1, 2, 3]], [[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]]) In [146]: arr.reshape(3,-1).T Out[146]: array([[ 0, 0, 0], [ 0, 1, 1], [ 0, 2, 2], [ 0, 3, 3], [ 1, 0, 4], [ 1, 1, 5], [ 1, 2, 6], [ 1, 3, 7], [ 2, 0, 8], [ 2, 1, 9], [ 2, 2, 10], [ 2, 3, 11]])
型
w41d8nur2#
我会说
b = np.column_stack(( np.indices(a.shape).reshape(a.ndim, -1).T, a.ravel() ))
字符串np.indices通常用于生成一个包含所有可能索引的数组。在这里,它只是被转置和整形,以形成b中除了最后一列之外的所有列。np.column_stack似乎是最自然的,最终将索引连接到松散的a。以上应该适用于任何维度a。
np.indices
np.column_stack
2条答案
按热度按时间kjthegm61#
许多可能的方法之一:
字符串
另一个:
型
w41d8nur2#
我会说
字符串
np.indices
通常用于生成一个包含所有可能索引的数组。在这里,它只是被转置和整形,以形成b
中除了最后一列之外的所有列。np.column_stack
似乎是最自然的,最终将索引连接到松散的a
。以上应该适用于任何维度
a
。