BFT*_*FTM 102 python arrays numpy scipy
假设我有一个numpy数组:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
Run Code Online (Sandbox Code Playgroud)
我有一个相应的"矢量:"
vector = np.array([1,2,3])
Run Code Online (Sandbox Code Playgroud)
如何对data
每行进行减法或除法运算,结果如下:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Run Code Online (Sandbox Code Playgroud)
长话短说:如何使用与每行对应的一维标量数组对2D数组的每一行执行操作?
Jos*_*del 158
干得好.您只需要使用None
(或替代np.newaxis
)与广播相结合:
In [6]: data - vector[:,None]
Out[6]:
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
In [7]: data / vector[:,None]
Out[7]:
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)
Ian*_*anH 10
如前所述,使用None
或使用切片np.newaxes
是一种很好的方法.另一种选择是使用转置和广播,如
(data.T - vector).T
Run Code Online (Sandbox Code Playgroud)
和
(data.T / vector).T
Run Code Online (Sandbox Code Playgroud)
对于更高维的数组,您可能需要使用swapaxes
NumPy数组的方法或NumPy rollaxis
函数.确实有很多方法可以做到这一点.
有关广播的更全面解释,请参阅 http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
meo*_*eow 10
添加到 stackoverflowuser2010 的答案,一般情况下你可以使用
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
vector = np.array([1,2,3])
data / vector.reshape(-1,1)
Run Code Online (Sandbox Code Playgroud)
这会将您的向量变成column matrix/vector
. 允许您按照您的意愿进行元素运算。至少对我来说,这是最直观的方法,因为(在大多数情况下)numpy 将只使用相同内部内存的视图来进行重塑,它也很有效。
Pythonic 的方法是......
np.divide(data.T,vector).T
Run Code Online (Sandbox Code Playgroud)
这负责重塑,结果也是浮点格式。在其他答案中,结果采用四舍五入的整数格式。
#NOTE:数据和向量中的列数不应匹配
归档时间: |
|
查看次数: |
68752 次 |
最近记录: |