Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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
Python 如何在没有for循环的情况下在2D numpy数组中设置多个列?_Python_For Loop_Numpy_Multidimensional Array_Indexing - Fatal编程技术网

Python 如何在没有for循环的情况下在2D numpy数组中设置多个列?

Python 如何在没有for循环的情况下在2D numpy数组中设置多个列?,python,for-loop,numpy,multidimensional-array,indexing,Python,For Loop,Numpy,Multidimensional Array,Indexing,我想如下设置numpy数组的值。但是我不想对循环使用。 有什么好办法吗 a = range(4) a[0] = [11,12,13,14,15,16] a[1] = [21,22,23,24,25,26] a[2] = [31,32,33,34,35,36] a[3] = [41,42,43,44,45,46] a = np.array(a) changeIndex = [0,2,4] for i in range(4): a[i][changeIndex] = 0 print a

我想如下设置numpy数组的值。但是我不想对循环使用
。
有什么好办法吗

a = range(4)
a[0] = [11,12,13,14,15,16]
a[1] = [21,22,23,24,25,26]
a[2] = [31,32,33,34,35,36]
a[3] = [41,42,43,44,45,46]

a = np.array(a)

changeIndex = [0,2,4]
for i in range(4):
    a[i][changeIndex] = 0

print a
#array([[ 0, 12,  0, 14,  0, 16],
#       [ 0, 22,  0, 24,  0, 26],
#       [ 0, 32,  0, 34,  0, 36],
#       [ 0, 42,  0, 44,  0, 46]])

实际上,您希望访问多个列,可以通过以下方式实现:

a[:, changeIndex] = 0
记住:

  • 第一个索引选择行,而第二个索引选择列
  • 可以使用列表或元组选择多个索引
  • 更好的风格:

    另外,定义多维numpy数组或矩阵的更好方法是:

    a = np.array([range(11,17), range(21,27), range(31, 37), range(41,47)])
    
    多亏了其中一条注释,您实际上可以使用
    np.arange()
    代替
    range()
    来加快计算速度

    矩阵:

    <2>当2D阵列工作时,用矩阵代替。在对矩阵执行操作时,矩阵保持其多维性质,也可以对其使用特殊的矩阵操作。阅读它们的工作原理也类似于阵列:

    a = np.matrix([range(11,17), range(21,27), range(31, 37), range(41,47)])
    

    供您参考的一个有点相关的线程是。

    您基本上想要访问多个列,您可以通过以下方式实现:

    a[:, changeIndex] = 0
    
    记住:

  • 第一个索引选择行,而第二个索引选择列
  • 可以使用列表或元组选择多个索引
  • 更好的风格:

    另外,定义多维numpy数组或矩阵的更好方法是:

    a = np.array([range(11,17), range(21,27), range(31, 37), range(41,47)])
    
    多亏了其中一条注释,您实际上可以使用
    np.arange()
    代替
    range()
    来加快计算速度

    矩阵:

    <2>当2D阵列工作时,用矩阵代替。在对矩阵执行操作时,矩阵保持其多维性质,也可以对其使用特殊的矩阵操作。阅读它们的工作原理也类似于阵列:

    a = np.matrix([range(11,17), range(21,27), range(31, 37), range(41,47)])
    

    供您参考的一个有点相关的线程是。

    我假设您不想使用“for”循环来迭代所有行。对于numpy,你不必走那条路

    你可以用

    a[:, changeIndex] = 0
    

    使用numpy,changeIndex可以是整数(仅更改一列)或changeIndex可以是列表(允许您更改多个列)。

    我假设您不想使用“for”循环来迭代所有行。对于numpy,你不必走那条路

    你可以用

    a[:, changeIndex] = 0
    

    使用numpy,changeIndex可以是一个整数(只更改一列)或changeIndex可以是一个列表(允许您更改多列)。

    使用
    np.arange
    在这种情况下甚至比
    range
    小2倍。使用
    np.vstack(…)
    或类似方法总是比
    np.array快([…])
    (在我现在的测试中是9x)使用
    np.arange
    在这种情况下甚至比
    range
    小2倍。并且使用
    np.vstack((…)
    或类似的方法总是比
    np.array([…])
    (在我现在的测试中是9x)