将numpy数组轴归零的python方法
有点恼火,我自己没能弄到这个,所以开始吧 假设我有一个二维numpy数组将numpy数组轴归零的python方法,python,numpy,Python,Numpy,有点恼火,我自己没能弄到这个,所以开始吧 假设我有一个二维numpy数组 import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) 我所处的情况是,我希望将此数组中的一列归零,但保留原始数组。我可以自己做 b = a.copy() b[:,1] = 0 得到 array([[1, 0, 3], [4, 0, 6], [7, 0, 9]]) array([[0, 2, 0], [0, 5,
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
我所处的情况是,我希望将此数组中的一列归零,但保留原始数组。我可以自己做
b = a.copy()
b[:,1] = 0
得到
array([[1, 0, 3],
[4, 0, 6],
[7, 0, 9]])
array([[0, 2, 0],
[0, 5, 0],
[0, 8, 0]])
或者,如果我想将一系列列归零,我可以这样做
b = a.copy()
b[:,[0,3]] = 0
得到
array([[1, 0, 3],
[4, 0, 6],
[7, 0, 9]])
array([[0, 2, 0],
[0, 5, 0],
[0, 8, 0]])
b阵列将只使用一个,然后丢弃
有没有其他类似于蟒蛇的方法可以作为一个衬里来完成?我只希望零值b数组通过一个绘图例程,之后就不需要了。基本上,在调用绘图函数之前,我不想再多出两行代码——如果我能像调用例程那样做的话,它会更干净。比如说
plotting_func(<numpy_magic_here>)
只有当b不再使用时,才能将某些列设置为零,您可以使用
np.inad
和np.arange
创建无效元素的掩码,当与输入数组相乘时,使用NumPy广播将无效列设置为零。因此,我们将有一个单行程序实现,如下所示-
a*~np.in1d(np.arange(a.shape[1]),cols_to_be_reset)
np.where(np.in1d(np.arange(a.shape[1]),cols_to_be_reset),0,a)
或者,可以使用np.where
进行选择,而不是像这样进行乘法-
a*~np.in1d(np.arange(a.shape[1]),cols_to_be_reset)
np.where(np.in1d(np.arange(a.shape[1]),cols_to_be_reset),0,a)
请注意,这并不是为了性能,而是作为一个班轮
样本运行-
In [546]: a
Out[546]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [547]: a*~np.in1d(np.arange(a.shape[1]),1)
Out[547]:
array([[1, 0, 3],
[4, 0, 6],
[7, 0, 9]])
In [548]: a*~np.in1d(np.arange(a.shape[1]),[0,2])
Out[548]:
array([[0, 2, 0],
[0, 5, 0],
[0, 8, 0]])
我可以想到一行程序,但不一定更简单、更可读……为什么要创建轴为零的a
?是否可以更改打印功能,以便只传递您关心的轴(即您不尝试归零的轴)?然后你可以在函数调用中通过简单的切片来实现。难道你不能将a[:,[columns that not zero]]
传递给plotting函数吗?我使用emcee为一些数据拟合了一个模型,给了我一个大数组,其中每一行都是可接受的参数值样本。在数据上绘制模型时,我希望看到模型的特定组件。我可以通过将第二个组件的规范化(比如数组的第二列)设置为零来实现。我希望这样做,所以只维护一个函数,没有任何额外的逻辑。编写一个帮助函数,包装您的复制代码。人工设计的一行程序不是pythonic的
;它们是perlonic
:)太好了,谢谢你!从其他一些评论来看,它看起来很好。答案被接受。