首页 > 解决方案 > Numpy中的行加法或列加法

问题描述

这是numpy arrays的一般性能/优化问题。说,我有一个列形式的numpy数组天:

[['Day1']
 ['Day2']
 ['Day3']
 ['Day4']
 ['Day5']] 

我想向其中添加存储在data中的新数据列。我应该使用:

1. Append column wise:
    new_data = numpy.append(days, data, axis=1)

2. Append row wise:
    days = numpy.transpose(days)
    data = numpy.transpose(data)
    new_data = numpy.append(days, data, axis=0)
    new_data = numpy.transpose(new_data)

标签: pythonpython-3.xnumpy

解决方案


制作列数组:

In [135]: days = np.array('Day1,Day2,Day3'.split(','))
In [136]: days
Out[136]: array(['Day1', 'Day2', 'Day3'], dtype='<U4')
In [137]: days = days[:,None]
In [138]: days
Out[138]: 
array([['Day1'],
       ['Day2'],
       ['Day3']], dtype='<U4')

示例 2d 数据数组:

In [139]: data = np.arange(12).reshape(3,4)

如果数组已经具有正确的形状,请使用np.append

In [140]: np.append(days, data, axis=1)
Out[140]: 
array([['Day1', '0', '1', '2', '3'],
       ['Day2', '4', '5', '6', '7'],
       ['Day3', '8', '9', '10', '11']], dtype='<U21')

但是,如果您查看np.append代码,您会发现axis它只是调用concatenate. 这是所有这些的基本功能stacks。(np.append是一个名称不佳且构思不佳的封面)

In [141]: np.concatenate([days, data], axis=1)
Out[141]: 
array([['Day1', '0', '1', '2', '3'],
       ['Day2', '4', '5', '6', '7'],
       ['Day3', '8', '9', '10', '11']], dtype='<U21')

还有一个连接列的封面:

In [142]: np.column_stack([days, data])
Out[142]: 
array([['Day1', '0', '1', '2', '3'],
       ['Day2', '4', '5', '6', '7'],
       ['Day3', '8', '9', '10', '11']], dtype='<U21')

如果需要,它将在输入中重塑以作为列工作:

In [143]: np.column_stack([days, np.arange(3)])
Out[143]: 
array([['Day1', '0'],
       ['Day2', '1'],
       ['Day3', '2']], dtype='<U21')

但请注意所有这些示例,结果是字符串 dtype。如果你想保留data为数字,你不想使用任何这些。


推荐阅读