展平numpy数组,没有double for循环 [英] Flatten numpy array without double for loop

查看:103
本文介绍了展平numpy数组,没有double for循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个二维矩阵.出于本示例的目的,我们假设它是一个随机矩阵

I have a 2-d matrix. For the purposes of this example, let's say it is a random matrix

>>> a = np.random.randn(5, 7)
>>> a
array([[-0.37279322,  0.28619523, -0.05309901,  0.26010327,  0.1846693 , 0.33112176,  0.75814911],
       [ 1.57001151, -0.86831693, -0.20576395,  1.46450855, -0.01631132, 3.02790403, -0.65313017],
       [ 0.2362675 , -1.52190536,  0.04687194,  2.01618876,  0.03780218, -0.53041096, -0.30104844],
       [-0.5504834 ,  1.04286156,  1.12863785,  0.89583492,  0.28607363, 1.42858007,  0.28582572],
       [-0.768464  ,  0.31952554,  0.81129581,  0.26239668, -0.23242878, -1.01584339,  0.39573906]])

和两个标签向量:

label_y = np.array([23, 984, 123, 9321, 121238])
label_x = np.array([121, 31312, 9123131, 1111, 1231441, 1929313, 192312312361])

我想展平a的元素并输出其标签的索引和值.例如:

I'd like to flatten the elements of a and output their label indeces and values. For example:

23,121,-0.37279322 
23,31312,0.28619523 
23,9123131,-0.05309901 
23,1111,0.26010327
23,1231441,0.1846693
23,1929313,0.33112176
23,192312312361,0.75814911 
984,121,...
...

在numpy中有没有for循环的简单方法吗?

is there an easy way of doing it in numpy without for loops?

推荐答案

使用

Use np.meshgrid to create 2D meshes corresponding to X and Y labels and then stack them as columns alongwith the 2D input array a, like so -

X,Y = np.meshgrid(label_x,label_y)
out = np.column_stack((Y.ravel(),X.ravel(),a.ravel()))

这篇关于展平numpy数组,没有double for循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆