python - 修改数组numpy中的多列
问题描述
我有一个 numpy 数组(nxn 矩阵),我只想修改总和为 0 的列。我想为所有这些列分配相同的值。为此,我首先采用总和为 0 的列的索引:
sum_lines = np.sum(mat_trans, axis = 0)
indices = np.where(sum_lines == 0)[0]
然后我对这些索引做了一个循环:
for i in indices:
mat_trans[:, i] = rank_vect
这样每个列现在都具有 rank_vect 列向量的值。
我想知道是否有办法在没有循环的情况下做到这一点,看起来像:
mat_trans[:, (np.where(sum_lines == 0)[0]))] = rank_vect
谢谢!
解决方案
In [114]: arr = np.array([[0,1,2,3],[1,0,2,-3],[-1,2,0,0]])
In [115]: sumlines = np.sum(arr, axis=0)
In [116]: sumlines
Out[116]: array([0, 3, 4, 0])
In [117]: idx = np.where(sumlines==0)[0]
In [118]: idx
Out[118]: array([0, 3])
所以我们要修改的列是:
In [119]: arr[:,idx]
Out[119]:
array([[ 0, 3],
[ 1, -3],
[-1, 0]])
In [120]: rv = np.array([10,11,12])
如果rv
是 1d,我们会得到一个形状错误:
In [121]: arr[:,idx] = rv
ValueError: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (2,3)
但是如果它是一个列向量(形状(3,1))它可以广播到(3,2)目标:
In [122]: arr[:,idx] = rv[:,None]
In [123]: arr
Out[123]:
array([[10, 1, 2, 10],
[11, 0, 2, 11],
[12, 2, 0, 12]])
推荐阅读
- c# - ASP.NET Core WebAPI 可以同时处理的最大请求数是多少?
- python - 如何在数据框中按名称将函数应用于特定列
- uwp - 如何从 UWP 中的运行时组件调用 MainPage 函数?
- nlp - 使用不平衡学习过采样后仅检索重采样实例的索引?
- bash - 语法错误:预期操作数(错误标记为“<”)
- php - 屏蔽电子邮件正则表达式
- reactjs - 不变违规:无效的挂钩调用。Hooks 只能在函数组件的主体内部调用
- reactjs - react-select 向左/向右移动输入光标
- git - 如何从 GIT 源中删除提交?
- angular - Angular PatchValue 不适用于 FormArray