在numpy中填充阵列

时间:2018-04-10 09:10:38

标签: python arrays numpy

我有一个大小为 1XN 的numpy向量my_indexes,它包含索引的布尔值和大小为 MxK 的2D数组my_array,其中K <&lt; N.实际上,布尔向量对应于我删除的列(或保留在数组my_array中),我想添加那些用零填充的列(或“NaNs”)。我删除列的代码:

 my_array= np.array(my_array[:, ~np.all(np.isnan(my_array), axis=0)])
 cols = np.all(np.isnan(my_array), axis=0)
 my_array = some_process(my_array)
 # How can I add the removed columns

我的数组如果大小 MXN ,则大小为 MXK 。如何用nan或0再次填充已删除的列?

一个例子可能是:

0.1 nan 0.3 .04 nan 0.12 0.12
0.1 nan 0.3 .04 nan 0.12 0.12
0.1 nan 0.3 .04 nan 0.12 0.12

首先,我想使用my_array= np.array(my_array[:, ~np.all(np.isnan(my_array), axis=0)])删除nan列。

0.1 0.3 .04 0.12 0.12
0.1 0.3 .04 0.12 0.12
0.1 0.3 .04 0.12 0.12

my_indexes向量是:

False True False False True False False

然后我想处理矩阵,然后让纳米柱回来(请注意,纳米柱不会发生预处理)。我想我需要使用np.insert function但是如何使用我的布尔矢量

1 个答案:

答案 0 :(得分:3)

您可以使用masked arrays

import numpy as np
import numpy.ma as ma

def some_process(x):
    return x**2

x = np.arange(9, dtype=float).reshape(3, 3)
x[:,1] = np.nan
print(x)
# [[  0.  nan   2.]
#  [  3.  nan   5.]
#  [  6.  nan   8.]]

# mask all np.nan and np.inf
masked_x = ma.masked_invalid(x)
# Compute the process only on the unmasked values and fill back np.nan
x = ma.filled(some_process(masked_x), np.nan)
print(x)
# [[  0.  nan   4.]
#  [  9.  nan  25.]
#  [ 36.  nan  64.]]