python - 为什么我的数据没有被屏蔽?

标签 python numpy multidimensional-array

data = [[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
        [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
        [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]]

我拥有的数据对象是 <class 'numpy.ndarray'>

知道数据是一个 numpy 对象,我执行了以下操作:

data = np.array(data)

我想将列表中的数字设置为0,我尝试过:

data[~np.isin(data,[2,4])] = 0

我希望前一个矩阵中出现的所有 2 次和 4 次均为 0,其余的保持其值,我得到的是:

TypeError: only integer scalar arrays can be converted to a scalar index

还尝试使用 np.array 将数据作为 numpy 数组提供也给出了错误。

最佳答案

您不应该否定 np.isin 中的掩码检查您是否打算将这些匹配值设置为 0。下面的代码可以正常工作:

此外,您应该将data设置为numpy数组而不是列表列表。

In [10]: data = np.array([[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
    ...:         [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
    ...:         [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]])
    ...:         

In [11]: data[np.isin(data, [2, 4])] = 0

In [12]: data
Out[12]: 
array([[0, 1, 1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6],
       [1, 1, 1, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 6, 6],
       [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 6]])
<小时/>

只是为了重现您的错误:

In [13]: data = [[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
    ...:         [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
    ...:         [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]]
    ...:         

In [14]: data[np.isin(data, [2, 4])] = 0
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-06ee1662f1f2> in <module>()
----> 1 data[np.isin(data, [2, 4])] = 0

TypeError: only integer scalar arrays can be converted to a scalar index

关于python - 为什么我的数据没有被屏蔽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949794/

相关文章:

多维数组上的 C# LINQ 查询

python - 使用正则表达式 OR 运算符来适应用户输入 "A"或 "An"

python - pymodbus 和 pymodbus3 模块有什么区别?

python - 具有不可迭代对象的 python 类中的错误

python - 如何从 ipywidget 选择小部件中获取值(value)?

python - 置信区间 3 维图

c# - 将二维数组传递给函数时,Mono Develop 调试器崩溃

python - typeError 帮助,plt.scatter 将我的 .csv 读取为真/假而不是数值

python - 区分多个 Websocket

python - NumPy 索引 : broadcasting with Boolean arrays