程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用NumPy从另一个数组及其索引创建2D数组大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用NumPy从另一个数组及其索引创建2D数组?

开发过程中遇到使用NumPy从另一个数组及其索引创建2D数组的问题如何解决?下面主要结合日常开发的经验,给出你关于使用NumPy从另一个数组及其索引创建2D数组的解决方法建议,希望对你解决使用NumPy从另一个数组及其索引创建2D数组有所启发或帮助;

在随后的步骤中使用array-initialization然后broadcasted-assignment分配索引和数组值-

def inDices_merged_arr(arr):
    m,n = arr.shape
    I,J = np.ogrID[:m,:n]
    out = np.empty((m,n,3), dtype=arr.dtypE)
    out[...,0] = I
    out[...,1] = J
    out[...,2] = arr
    out.shape = (-1,3)
    return out

请注意,我们避免使用np.inDices(arr.shapE),这可能会减慢速度。

样品运行-

In [10]: arr = np.array([[1, 3, 7], [4, 9, 8]])

In [11]: inDices_merged_arr(arr)
Out[11]: 
array([[0, 0, 1],
       [0, 1, 3],
       [0, 2, 7],
       [1, 0, 4],
       [1, 1, 9],
       [1, 2, 8]])

arr = np.random.randn(100000, 2)

%timeit df = pd.DataFrame(np.hstack((np.inDices(arr.shapE).reshape(2, arr.sizE).T,\
                                arr.reshape(-1, 1))), columns=['x', 'y', 'value'])
100 loops, best of 3: 4.97 ms per loop

%timeit pd.DataFrame(inDices_merged_arr_divakar(arr), columns=['x', 'y', 'value'])
100 loops, best of 3: 3.82 ms per loop

%timeit pd.DataFrame(inDices_merged_arr_eric(arr), columns=['x', 'y', 'value'], dtype=np.float32)
100 loops, best of 3: 5.59 ms per loop

注意: 时间包括转换到pandas数据帧,这是该解决方案的最终用例。

解决方法

给定一个数组:

arr = np.array([[1,3,7],[4,9,8]]); arr

array([[1,8]])

并给出其索引:

np.inDices(arr.shapE)

array([[[0,0],[1,1,1]],[[0,2],[0,2]]])

如何将它们整齐地堆叠在一起以形成新的2D​​阵列?这就是我想要的:

array([[0,1],3],2,4],9],8]])

这是我目前的解决方案:

def foo(arr):
    return np.hstack((np.inDices(arr.shapE).reshape(2,arr.sizE).T,arr.reshape(-1,1)))

它可以工作,但是执行此操作是否更短/更优雅?

大佬总结

以上是大佬教程为你收集整理的使用NumPy从另一个数组及其索引创建2D数组全部内容,希望文章能够帮你解决使用NumPy从另一个数组及其索引创建2D数组所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。