假设我有一个2x3 Ndaray:

[[0,1,1],
 [1,1,1]]

我想用[0,0,0]替换{第一个索引中有0的任何行}:

[[0,0,0],
 [1,1,1]]

有没有可能用np实现这一点.哪里

import numpy as np
arr = np.array([[0,1,1],[1,1,1]])
replacement = np.full(arr.shape,[0,0,0])
new = np.where(arr[:,0]==0,replacement,arr)

我在最后一行遇到以下错误:

ValueError: operands could not be broadcast together with shapes (2,) (2,3) (2,3) 

这个错误是有道理的,但我不知道如何修复代码来实现我的目标.任何建议都将不胜感激!

Edit:

如果我有这样的安排:

[[[0,1,1],[1,1,1],[1,1,1]],
 [[1,1,1],[1,1,1],[1,1,1]],
 [[1,1,1],[1,1,1],[1,1,1]]]

如何用[0,0,0]替换第一个三元组?

推荐答案

简单的索引/广播可以:

a[a[:,0]==0] = [0,0,0]

输出:

array([[0, 0, 0],
       [1, 1, 1]])

说明:

# get first column
a[:,0]
# array([0, 1])

# compare to 0 creating a boolean array
a[:,0]==0
# array([ True, False])

# select rows where the boolean is True
a[a[:,0]==0]
# array([[0, 1, 1]])

# replace those rows with new array
a[a[:,0]==0] = [0,0,0]
using np.where

在我看来,这不那么优雅:

a[np.where(a[:,0]==0)[0]] = [0,0,0]

Edit: generalization

输入:

a = np.arange(3**3).reshape((3,3,3))

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

转变:

a[a[...,0]==0] = [0,0,0]

array([[[ 0,  0,  0],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

Python相关问答推荐

如何在where或过滤器方法中使用SQLAlchemy hybrid_Property?

为什么Pydantic在我申报邮箱时说邮箱丢失

如何在Pandas 中存储二进制数?

Pandas 按照特殊规则保留每n行

在编写要Excel的数据透视框架时修复标题行

如何终止带有队列的Python进程?+ 队列大小的错误?

如何在PIL、Python中对图像应用彩色面膜?

DuckDB将蜂巢分区插入拼花文件

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

在函数内部使用eval(),将函数的输入作为字符串的一部分

使用mySQL的SQlalchemy过滤重叠时间段

使用SciPy进行曲线匹配未能给出正确的匹配

使用新的类型语法正确注释ParamSecdecorator (3.12)

用Python解密Java加密文件

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

如何让这个星型模式在Python中只使用一个for循环?

Asyncio:如何从子进程中读取stdout?

如何保持服务器发送的事件连接活动?

需要帮助重新调整python fill_between与数据点

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?