Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 向Numpy数组添加新列的最佳方法_Python_Arrays_List_Python 2.7_Numpy - Fatal编程技术网

Python 向Numpy数组添加新列的最佳方法

Python 向Numpy数组添加新列的最佳方法,python,arrays,list,python-2.7,numpy,Python,Arrays,List,Python 2.7,Numpy,我想给矩阵加一个向量 向量当前是一个列表(尽管很容易转换为1D Numpy数组) 矩阵目前是一个Numpy数组 我在想,我可以将矩阵重塑为矩阵,然后循环最后一列,添加所需的值。但是,我不确定如何以这种方式重塑矩阵(即添加列)。我还希望我不必使用for循环 我研究了如何使用np.concatenate,np.hstack,以及np.append。但是,我认为我需要创建一个原始矩阵,作为列allNone的矩阵。这对我不起作用,因为在我需要将最后一个向量添加到矩阵之前,我使用这个矩阵进行许多计算 如果

我想给矩阵加一个向量

向量当前是一个列表(尽管很容易转换为1D Numpy数组)

矩阵目前是一个Numpy数组

我在想,我可以将矩阵重塑为矩阵,然后循环最后一列,添加所需的值。但是,我不确定如何以这种方式重塑矩阵(即添加列)。我还希望我不必使用for循环


我研究了如何使用
np.concatenate
np.hstack
,以及
np.append
。但是,我认为我需要创建一个原始矩阵,作为列all
None
的矩阵。这对我不起作用,因为在我需要将最后一个向量添加到矩阵之前,我使用这个矩阵进行许多计算

如果两者都是形状正确的numpy阵列,它将自动工作,这要归功于广播:

>>> m, n = 5, 6
>>> import numpy as np
>>> a = np.random.rand(5)
>>> b = np.random.rand(5, 6)
>>> a + b
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (5,) (5,6)
>>> a = a.reshape((5, 1))
>>> a + b
array([[ 0.79046654,  0.81610381,  1.6719495 ,  1.46325624,  0.92063256,
         1.06377227],
       [ 1.6789712 ,  1.39644844,  0.94905931,  0.95343555,  1.02492318,
         1.15156054],
       [ 1.37071564,  0.96554418,  1.75242678,  1.33323359,  1.00644693,
         1.08850993],
       [ 1.03423776,  1.03496123,  0.82535266,  0.12488793,  0.45481279,
         0.90367567],
       [ 0.51112569,  0.49737014,  1.01857201,  0.64392256,  0.23526375,
         1.12763083]])
>>> 
>m,n=5,6
>>>将numpy作为np导入
>>>a=np.rand.rand(5)
>>>b=np.rand.rand(5,6)
>>>a+b
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:操作数无法与形状(5,)(5,6)一起广播
>>>a=a.重塑(5,1))
>>>a+b
阵列([[0.79046654,0.81610381,1.6719495,1.46325624,0.92063256,
1.06377227],
[ 1.6789712 ,  1.39644844,  0.94905931,  0.95343555,  1.02492318,
1.15156054],
[ 1.37071564,  0.96554418,  1.75242678,  1.33323359,  1.00644693,
1.08850993],
[ 1.03423776,  1.03496123,  0.82535266,  0.12488793,  0.45481279,
0.90367567],
[ 0.51112569,  0.49737014,  1.01857201,  0.64392256,  0.23526375,
1.12763083]])
>>> 


如果两者都是形状正确的numpy阵列,则由于广播,它将自动工作:

>>> m, n = 5, 6
>>> import numpy as np
>>> a = np.random.rand(5)
>>> b = np.random.rand(5, 6)
>>> a + b
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (5,) (5,6)
>>> a = a.reshape((5, 1))
>>> a + b
array([[ 0.79046654,  0.81610381,  1.6719495 ,  1.46325624,  0.92063256,
         1.06377227],
       [ 1.6789712 ,  1.39644844,  0.94905931,  0.95343555,  1.02492318,
         1.15156054],
       [ 1.37071564,  0.96554418,  1.75242678,  1.33323359,  1.00644693,
         1.08850993],
       [ 1.03423776,  1.03496123,  0.82535266,  0.12488793,  0.45481279,
         0.90367567],
       [ 0.51112569,  0.49737014,  1.01857201,  0.64392256,  0.23526375,
         1.12763083]])
>>> 
>m,n=5,6
>>>将numpy作为np导入
>>>a=np.rand.rand(5)
>>>b=np.rand.rand(5,6)
>>>a+b
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:操作数无法与形状(5,)(5,6)一起广播
>>>a=a.重塑(5,1))
>>>a+b
阵列([[0.79046654,0.81610381,1.6719495,1.46325624,0.92063256,
1.06377227],
[ 1.6789712 ,  1.39644844,  0.94905931,  0.95343555,  1.02492318,
1.15156054],
[ 1.37071564,  0.96554418,  1.75242678,  1.33323359,  1.00644693,
1.08850993],
[ 1.03423776,  1.03496123,  0.82535266,  0.12488793,  0.45481279,
0.90367567],
[ 0.51112569,  0.49737014,  1.01857201,  0.64392256,  0.23526375,
1.12763083]])
>>> 

您可以使用:


但是,请注意,最好首先分配所需的大小合适(最大)的数组,因为像
np.column\u stack
np.append
这样的操作可能需要为较大的数组分配新空间,并
arr
中的所有值复制到新数组中。这可能很慢,而且内存效率也很低。(当您只需要一个阵列时,为什么要为两个几乎相同的阵列分配空间?)

因此,您可以使用

arr = np.empty((3, 5))  # the size of the final, biggest array
smallarr = arr[:, :-1]  
由于
arr[:,:-1]
arr
的基本部分,
smallarr
是arr的视图。修改
smallarr
也会影响
arr

例如:

In [117]: arr = np.empty((3, 5))

In [118]: smallarr = arr[:, :-1]

In [119]: smallarr[...] = np.arange(12).reshape(3,4)

In [123]: arr[:, -1] = v

In [124]: arr
Out[124]: 
array([[  0.,   1.,   2.,   3.,   1.],
       [  4.,   5.,   6.,   7.,   2.],
       [  8.,   9.,  10.,  11.,   3.]])
当分配给
smallarr
时,只需确保使用
smallarr[…]=…
而不是
smallarr=…
,因为您希望就地修改
smallarr
,而不是将变量名重定向到新对象

您还可以使用许多NumPy函数中可用的
out
参数修改
smallarr
。除了返回值外,函数还将值写入
out
参数指定的数组

因此,您可以在
smallarr
上进行计算,并对
arr
进行修改,使其大小合适,所有计算都以节省内存的方式完成。

您可以使用:


但是,请注意,最好首先分配所需的大小合适(最大)的数组,因为像
np.column\u stack
np.append
这样的操作可能需要为较大的数组分配新空间,并
arr
中的所有值复制到新数组中。这可能很慢,而且内存效率也很低。(当您只需要一个阵列时,为什么要为两个几乎相同的阵列分配空间?)

因此,您可以使用

arr = np.empty((3, 5))  # the size of the final, biggest array
smallarr = arr[:, :-1]  
由于
arr[:,:-1]
arr
的基本部分,
smallarr
是arr的视图。修改
smallarr
也会影响
arr

例如:

In [117]: arr = np.empty((3, 5))

In [118]: smallarr = arr[:, :-1]

In [119]: smallarr[...] = np.arange(12).reshape(3,4)

In [123]: arr[:, -1] = v

In [124]: arr
Out[124]: 
array([[  0.,   1.,   2.,   3.,   1.],
       [  4.,   5.,   6.,   7.,   2.],
       [  8.,   9.,  10.,  11.,   3.]])
当分配给
smallarr
时,只需确保使用
smallarr[…]=…
而不是
smallarr=…
,因为您希望就地修改
smallarr
,而不是将变量名重定向到新对象

您还可以使用许多NumPy函数中可用的
out
参数修改
smallarr
。除了返回值外,函数还将值写入
out
参数指定的数组


因此,您可以在
smallarr
上进行计算,并对
arr
进行修改,使其大小合适,所有操作都以节省内存的方式完成。

如何让Latex代码在这里工作?有。请参见@FredrikPihl-我刚刚使用URL解释Latex,但只有一个URL实际工作。。我检查了所有这些,它们都给出了我想在这个问题中展示的正确公式。有什么帮助吗?我如何让Latex代码在这里工作?有。请参见@FredrikPihl-我刚刚使用URL解释Latex,但只有一个URL实际工作。。我检查了所有这些,它们都给出了我想在这个问题中展示的正确公式。有什么帮助吗?这个答案是错误的。这段代码在做什么