Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将numpy数组轴归零的python方法_Python_Numpy - Fatal编程技术网

将numpy数组轴归零的python方法

将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,

有点恼火,我自己没能弄到这个,所以开始吧

假设我有一个二维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, 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
:)太好了,谢谢你!从其他一些评论来看,它看起来很好。答案被接受。