python - 我可以使用数组作为索引对 numpy 数组进行切片吗?

标签 python arrays numpy slice matrix-indexing

我有 2 个 numpy 数组:

a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

b = np.array([2, 1, 2])
我想用b作为 a 列的起始索引并设置 a 的所有值从这些列索引开始到 0 像这样:
np.array([[1, 2, 3],
          [4, 0, 6],
          [0, 0, 0]])
即,将第 1 列的元素从位置 2 开始设置为 0,将第 2 列的元素从位置 1 开始设置为 0,并将第 3 列的元素从位置 2 开始设置为 0。
当我尝试这个时:
a[:, b:] = 0
我得到
TypeError: only integer scalar arrays can be converted to a scalar index
有没有办法在没有 for 循环的情况下使用索引数组进行切片?
编辑:更新示例以显示索引可以是任意的

最佳答案

您可以使用 boolean array indexing .首先,创建要设置为 0 的索引掩码,然后将掩码应用于数组并分配替换值(例如,在您的情况下为 0)。

mask = b>np.arange(a.shape[1])[:,None]
a[~mask]=0
输出:
array([[1, 2, 3],
       [4, 0, 6],
       [0, 0, 0]])

关于python - 我可以使用数组作为索引对 numpy 数组进行切片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946768/

相关文章:

使用循环打印 PHP 数组

python - scikits 学习 SVM - 一维分离超平面

python - 将 numpy 数组元素包装为整数

python - 如何在关心 NaN 值的同时获取数据框中值的百分比变化?

python - 使用正则表达式在 python 中的字符串中将 Boolean true 转换为 True

python - 真的很喜欢在 python 上打印

ruby-on-rails - will_paginate 列表中每个项目的正确编号?

javascript - 将货币紧凑表示法(例如 '$1.5k' )转换为整数(例如 1500)

python - 如何按索引拆分数组,其中拆分的子数组包含拆分点

python - Pandas Dataframe 删除索引条件为 true 的项目