可以重建2d矩阵,其中已将遮罩与numpy一起使用,并且已展平

丹尼尔

如问题所述,我有一个2D矩阵(1000、2000),在该矩阵中,我以numpy where函数应用条件,方法如下:

import numpy as np

A = np.random.randn(1000, 2000)
print(A.shape)
(1000, 2000)
mask = np.where((A >=0.1) & (A <= 0.5))

A = A[mask]
print(A.shape)
(303112,)

我得到一个扁平化矩阵,在仅支持一维矩阵的Fortran程序中用作输入,该程序的输出与输入一维矩阵具有相同的维数(303112,),是否有任何方法或函数可以重建扁平化矩阵转换为其原始2D形式。如果有人知道任何numpy方法或任何建议都会有很大的帮助,我正在考虑将索引保存在布尔矩阵中,并使用它们来重构矩阵。

问候。

阿克塞·塞加尔(Akshay Sehgal)

IIUC您需要维护掩码的1D索引和2D索引,以便在尝试使用FORTRAN程序更新这些值时,可以切换到1D作为输入,然后切换回2D以更新原始阵列。

您可以用于np.ravel_multi_index将2D索引转换为1D。然后,您可以使用这些1D索引使用将它们转换回2D np.unravel_index(尽管由于已经有了2D蒙版,所以无需再次将1D转换为2D。)

import numpy as np

A = np.random.randn(1000, 2000)
mask = np.where((A >=0.1) & (A <= 0.5))

idx_flat = np.ravel_multi_index(mask, (1000,2000)) #FLAT 1D indexes using original mask
idx_2d = np.unravel_index(idx_flat, (1000,2000))   #2D INDEXES using the FLAT 1D indexes


#Comparing the method of using flat indexes and A[mask]
print(np.allclose(A.ravel()[idx_flat],A[mask])) 
### True

#Comparing the freshly created 2d indexes to the original mask
print(np.allclose(idx_2d,mask))
### True

这是一个虚拟测试用例,其端到端代码用于(3,3)矩阵。

import numpy as np

#Dummy matrix A and mask
A = np.random.randn(3, 3)  #<---- shape (3,3)
mask = np.where(A <= 0.5)
mask[0].shape  #Number of indexes in 2D mask
###Output: (6,)

#########################################################

#Flatten 2D indexes to 1D
idx_flat = np.ravel_multi_index(mask, (3,3)) #<--- shape (3,3)
idx_flat.shape  #Number of indexes in flattened mask
###Output: (6,)

#########################################################

#Feed the 6 length array to fortran function
def fortran_function(x):
    return x**2

flat_array = A.ravel()[idx_flat]
fortran_output = fortran_function(flat_array)

#Number of values in fortran_output
fortran_output.shape
###Output: (6,)

#########################################################

#Create a empty array 
new_arr = np.empty((3,3))  #<---- shape (3,3)
new_arr[:] = np.nan
new_arr[mask] = fortran_output   #Feed the 1D array to the 2D masked empty array

new_arr
array([[5.63399114e-04,            nan, 7.86255167e-01],
       [3.94992857e+00, 4.88932044e-02, 2.45489069e+00],
       [3.51957270e-02,            nan,            nan]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

numpy bincount可以与2D数组一起使用吗?

来自分类Dev

numpy:展平2D数组的某些列

来自分类Dev

如何使用numpy计算2d数组的“最大遮罩”

来自分类Dev

如何在不使用numpy的情况下将2D列表展平为1D?

来自分类Dev

使用numpy.save保存Numpy 2D数组的列表(数组在一起是锯齿状的)

来自分类Dev

遮罩2D Numpy数组

来自分类Dev

展平2D数组1D和

来自分类Dev

排序矩阵不展平,numpy

来自分类Dev

排序矩阵不展平,numpy

来自分类Dev

折叠其中一个维度的3d矩阵以制作2d矩阵

来自分类Dev

将6D数组以numpy展平为2D的惯用方式,同时保留汉密尔顿结构

来自分类Dev

如何展平第二轴上具有不同长度的2d numpy数组?

来自分类Dev

如何在C#Unity中将C结构与2D数组一起使用

来自分类Dev

如何将std :: find()与2d std:数组一起使用?

来自分类Dev

在C中将Free与2D数组一起使用时出错

来自分类Dev

如何将printf与2D阵列一起使用?

来自分类Dev

我可以将Arrays.fill与2d数组一起使用吗?如果是这样,我该怎么做?

来自分类Dev

是否可以将SSL协议与NEVPNManager一起使用(并且不使用NETunnelProvider API)

来自分类Dev

我可以构建 2 个 IServiceProvider 并且它们一起工作吗(.net core )

来自分类Dev

重载“ =”以使“ +”与矩阵一起使用

来自分类Dev

numpy 2d和1d加法平

来自分类Dev

将2d矩阵转换为3d一个热矩阵numpy

来自分类Dev

Linux邮件客户端,可以与GMail一起使用,并且可以使用vim作为编辑器

来自分类Dev

我可以将glmnet与插入符号和稀疏矩阵一起使用吗?

来自分类Dev

将php json_decode与1d和2d数组一起使用

来自分类Dev

我可以将Box2D对象与Cocos2d-X对象一起使用吗?

来自分类Dev

inotifywait可以与已安装的S3存储桶一起使用吗?

来自分类Dev

是否可以将animate.css与已翻译的元素一起使用?

来自分类Dev

可以将inotifywait与已安装的S3存储桶一起使用吗?

Related 相关文章

  1. 1

    numpy bincount可以与2D数组一起使用吗?

  2. 2

    numpy:展平2D数组的某些列

  3. 3

    如何使用numpy计算2d数组的“最大遮罩”

  4. 4

    如何在不使用numpy的情况下将2D列表展平为1D?

  5. 5

    使用numpy.save保存Numpy 2D数组的列表(数组在一起是锯齿状的)

  6. 6

    遮罩2D Numpy数组

  7. 7

    展平2D数组1D和

  8. 8

    排序矩阵不展平,numpy

  9. 9

    排序矩阵不展平,numpy

  10. 10

    折叠其中一个维度的3d矩阵以制作2d矩阵

  11. 11

    将6D数组以numpy展平为2D的惯用方式,同时保留汉密尔顿结构

  12. 12

    如何展平第二轴上具有不同长度的2d numpy数组?

  13. 13

    如何在C#Unity中将C结构与2D数组一起使用

  14. 14

    如何将std :: find()与2d std:数组一起使用?

  15. 15

    在C中将Free与2D数组一起使用时出错

  16. 16

    如何将printf与2D阵列一起使用?

  17. 17

    我可以将Arrays.fill与2d数组一起使用吗?如果是这样,我该怎么做?

  18. 18

    是否可以将SSL协议与NEVPNManager一起使用(并且不使用NETunnelProvider API)

  19. 19

    我可以构建 2 个 IServiceProvider 并且它们一起工作吗(.net core )

  20. 20

    重载“ =”以使“ +”与矩阵一起使用

  21. 21

    numpy 2d和1d加法平

  22. 22

    将2d矩阵转换为3d一个热矩阵numpy

  23. 23

    Linux邮件客户端,可以与GMail一起使用,并且可以使用vim作为编辑器

  24. 24

    我可以将glmnet与插入符号和稀疏矩阵一起使用吗?

  25. 25

    将php json_decode与1d和2d数组一起使用

  26. 26

    我可以将Box2D对象与Cocos2d-X对象一起使用吗?

  27. 27

    inotifywait可以与已安装的S3存储桶一起使用吗?

  28. 28

    是否可以将animate.css与已翻译的元素一起使用?

  29. 29

    可以将inotifywait与已安装的S3存储桶一起使用吗?

热门标签

归档