python - 在给定轴索引处替换 nd numpy 数组中的值

标签 python arrays numpy

我想在给定索引(例如 0)沿给定轴(例如 - 2) 具有给定值(例如 0),等效于:

A[:,:,0,:]=0

问题是输入数组 A 可能以 3D 或 4D 或其他形状出现,所以对于 3D 数据我需要

A[:,0,:]=0

如果是 5D:A[:,:,:,0,:]=0

目前我正在使用 exec() 来完成这项工作:

slicestr=[':']*numpy.ndim(var)
slicestr[-2]=str(0)
slicestr=','.join(slicestr)
cmd='A[%s]=0' %slicestr
exec(cmd)
return A

我有点担心 exec() 的使用可能不是一个很好的方法。我知道 numpy.take() 可以为我提供沿特定轴的特定索引处的列,但要替换值,我仍然需要构建动态的切片/索引字符串。所以我想知道是否有任何原生的 numpy 方法可以实现这一目标?

谢谢。

最佳答案

您可以使用省略号(有关更多信息,请参阅 numpy indexing)跳过前几个维度:

# assert A.ndim >= 2
A[...,0,:]=0

A2d = np.arange(12).reshape(2,6)
A3d = np.arange(12).reshape(2,3,2)
A4d = np.arange(12).reshape(2,1,3,2)

A2d[...,0,:] = 0

A2d
#array([[ 0,  0,  0,  0,  0,  0],
#       [ 6,  7,  8,  9, 10, 11]])

A3d[...,0,:] = 0

A3d
#array([[[ 0,  0],
#        [ 2,  3],
#        [ 4,  5]],

#       [[ 0,  0],
#        [ 8,  9],
#        [10, 11]]])

A4d[...,0,:] = 0

A4d
#array([[[[ 0,  0],
#         [ 2,  3],
#         [ 4,  5]]],  

#       [[[ 0,  0],
#         [ 8,  9],
#         [10, 11]]]])

关于python - 在给定轴索引处替换 nd numpy 数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761745/

相关文章:

Python:为什么我的模块变量丢失了它们的内容?

javascript - 使用 lambda 函数在包含对象数组的对象数组中查找 JavaScript 对象

python - 修改矩阵行和列的每两个最大元素

python - 如何将变量值替换为 sympy python 中的符号矩阵?

python - 如何从 ('a' , 'a/b' , 'a/b/c' , ('a' ) 得到 'b' , 'c' , 0x104567910 )?

javascript - 有没有办法使用像 React 这样的前端框架在浏览器中运行 Python 脚本客户端?

java - 无法将字符串转换为 JsonArray

python - Numpy:如何查询多个多维数组?

python - pip 无法从本地 pypi 中找到包(jfrog artifactory)

java - 如何用数组引用这里