【发布时间】:2021-04-12 12:55:55
【问题描述】:
我有一个形状为(5,8, 15000) 的 3D numpy 数组(我称之为张量)。
由于一些计算填充了它,张量内有一些NaN。
最后一个轴显示模拟指数。我有一个过程在计算机上重复了 15,000 次,动态略有变化。
我想查看所有 15,000 次模拟,并查看与此类模拟相对应的二维数组(形状为 (5,8))。如果第二行有一个 NaN,在 2D 数组中的所有列(即[1,:]),我想从 3D 张量中删除模拟。这将在所有 15,000 次模拟中重复。
也就是说,新张量的形状应为(5, 8, 15000 - number_of_bad_sims),对应于该模拟的所有二维数组,其中至少包含 1 个 NaN。张量的其余部分应保持不变。我不想触摸第二行没有 NaN 的任何二维数组。
我试过了:
# threeDimTensor has shape (5,8, 15000)
for idx in range(threeDimTensor.shape[2]): # for all simulations
boolean_array = np.isnan(threeDimTensor[1, :, idx]) # check if any of the results is NaN
condition = False
for element in boolean_array:
if element == True and condition == False:
condition = True
np.delete(threeDimTensor, idx, axis=2) # along last axis ???
我的问题是如何存储np.delete() 结果?我不知道我有多少 NaN,因此我最初无法创建一个 np.zeros(input_shape) 3D 数组来填充非 NaN 的值。
另外,我的np.delete() 指令正确吗?
存储“干净”的新三维张量的正确、有效方法是什么? 也就是如何完成这段代码,返回新的三维张量并进一步使用?
谢谢!
【问题讨论】:
-
np.delete返回一个新数组。最好使用一次,并列出要删除的所有索引的列表(或数组)。或者更好的是,考虑你想要保留的燕鸥。
标签: python arrays numpy data-science tensor