将值填充到给定 Numpy 中的索引数组和值数组的数组中
Fill values into an array given indexes array and values array in Numpy
我有一个数组 indexes
,其中每一行都包含应填充的列。例如:
[array([[ 2, 14098, 6824, 24207, 1215],
[ 51, 1277, 3197, 1052, 4076],......
我还有另一个数组 values
,其中包含应在这些位置填充的值。例如:
array([[1, 7, 75, 82, 11],
[11, 5, 8, 82, 811],...
这意味着对于第 0 行,第 2 列应填充值“1”,第 14098 列应填充值“7”...对于第 1 行,第 51 列应填充值“11” ,第 1277 列应填充值“5”...
第三个数组,a = np.zeros((100000, 100000))
是要填充的数组,给定前两个数组。
我现在正在使用嵌套循环来执行此操作,但我很确定有更好的方法来执行此操作:
for row_idx in range(indexes.shape[0]):
for col_idx in range(indexes.shape[1]):
column = indexes[row_idx][col_idx]
a[row_idx][indexes[row_idx][col_idx]] = values[row_idx][col_idx]
如何使用 python/numpy(花式索引、广播...)样式填充数组?由于内存有限,最节省内存的方法是什么?
提前感谢您的帮助!
这可以通过 np.put_along_axis
来完成
Put values into the destination array by matching 1d index and data slices.This iterates over matching 1d slices oriented along the specified axis in the index and data arrays, and uses the former to place values into the latter. These slices can be different lengths.
查看此示例,摘自 here
In [50]: df
Out[50]:
datetime1 datetime2 datetime3 datetime4
1 5 6 5 5
2 7 2 3 5
3 4 2 3 2
4 6 4 4 7
5 7 3 8 9
In [51]: index_arr = np.array([3, 2, 0 ,1 ,2])
In [52]: replace_arr = np.array([14, 12, 23, 17 ,15])
In [53]: np.put_along_axis(df.to_numpy(),index_arr[:,None],replace_arr[:,None],axis=1)
In [54]: df
Out[54]:
datetime1 datetime2 datetime3 datetime4
1 5 6 5 14
2 7 2 12 5
3 23 2 3 2
4 6 17 4 7
5 7 3 15 9
例如,如您所见,df[0][3]
的值已从 5
更改为 14
,应用相同的逻辑可以很好地解决您的问题。
我有一个数组 indexes
,其中每一行都包含应填充的列。例如:
[array([[ 2, 14098, 6824, 24207, 1215],
[ 51, 1277, 3197, 1052, 4076],......
我还有另一个数组 values
,其中包含应在这些位置填充的值。例如:
array([[1, 7, 75, 82, 11],
[11, 5, 8, 82, 811],...
这意味着对于第 0 行,第 2 列应填充值“1”,第 14098 列应填充值“7”...对于第 1 行,第 51 列应填充值“11” ,第 1277 列应填充值“5”...
第三个数组,a = np.zeros((100000, 100000))
是要填充的数组,给定前两个数组。
我现在正在使用嵌套循环来执行此操作,但我很确定有更好的方法来执行此操作:
for row_idx in range(indexes.shape[0]):
for col_idx in range(indexes.shape[1]):
column = indexes[row_idx][col_idx]
a[row_idx][indexes[row_idx][col_idx]] = values[row_idx][col_idx]
如何使用 python/numpy(花式索引、广播...)样式填充数组?由于内存有限,最节省内存的方法是什么?
提前感谢您的帮助!
这可以通过 np.put_along_axis
Put values into the destination array by matching 1d index and data slices.This iterates over matching 1d slices oriented along the specified axis in the index and data arrays, and uses the former to place values into the latter. These slices can be different lengths.
查看此示例,摘自 here
In [50]: df
Out[50]:
datetime1 datetime2 datetime3 datetime4
1 5 6 5 5
2 7 2 3 5
3 4 2 3 2
4 6 4 4 7
5 7 3 8 9
In [51]: index_arr = np.array([3, 2, 0 ,1 ,2])
In [52]: replace_arr = np.array([14, 12, 23, 17 ,15])
In [53]: np.put_along_axis(df.to_numpy(),index_arr[:,None],replace_arr[:,None],axis=1)
In [54]: df
Out[54]:
datetime1 datetime2 datetime3 datetime4
1 5 6 5 14
2 7 2 12 5
3 23 2 3 2
4 6 17 4 7
5 7 3 15 9
例如,如您所见,df[0][3]
的值已从 5
更改为 14
,应用相同的逻辑可以很好地解决您的问题。