我想在2D列表中使用逻辑索引,但似乎不支持此功能。
# For example
twoDimList = [[0, 0, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1]]
for rowIdx in range(0, len(twoDimList)):
for colIdx in range(0, len(twoDimList[rowIdx])):
if twoDimList[rowIdx][colIdx] == 0:
twoDimList[rowIdx][colIdx] = np.nan
twoDimList[twoDimList == 0] = numpy.nan # In fact, it's illegal.
如何使这种设计模式更加巧妙。
答案 0 :(得分:3)
根据您的评论,列表不是一个numpy数组。您可以使用以下内容构建一个:
import numpy as np
# convert the 2d Python list into a numpy array
twoDimList = np.array(twoDimList,dtype=np.float)
twoDimList[twoDimList == 0] = np.nan
dtype
在这里至关重要:如果你没有指定它,numpy会假设你给它一个整数矩阵,并且整数没有NaN(仅适用于浮动NaN已定义)。
您还可以为numpy数组提供另一个变量名(但是在numpy数组中完成的更改不会反映在原始Python列表中)。
如果您的原始列表是(基于您的样本数据):
twoDimList = [[0, 0, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1]]
我们得到:
>>> twoDimList = [[0, 0, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1]]
>>> twoDimList = np.array(twoDimList,dtype=np.float)
>>> twoDimList[twoDimList == 0] = np.nan
>>> twoDimList
array([[ nan, nan, nan, 1.],
[ nan, nan, 1., 1.],
[ nan, 1., 1., 1.]])