我有一个大小为 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但是如何使用我的布尔矢量
答案 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.]]