为了测试单个值输出上的各种参数,我正在创建一个多维数组来存储值。但是,为了相应地更新值,我需要计算要更新的位置。为了加快速度,我想用N-1维数组对N维数组进行切片。 例如,如果我有一个二维数组: ''' arr = 1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5 '''
和切片数组: ''' 切片器= [2、3、1、3、5] ''' 可以这样做吗?
arr [:slicer] =
1 2 N N N
1 2 3 N N
1 N N N N
1 2 3 N N
1 2 3 4 5
其中N是Nan或Nul或为空。
这可能吗?如果没有,什么是实现相同结果的最佳/最快方法?
要明确的是,在理想的世界中,我将可以执行以下操作:
arr [:slicer] = arr [:slicer] *更新
答案 0 :(得分:0)
arr = ['1 2 3 4 5', '1 2 3 4 5', '1 2 3 4 5', '1 2 3 4 5', '1 2 3 4 5']
slicing_list = [2, 3, 1, 3, 5]
result = ""
arr_len = len(arr)
for st in arr:
for n in slicing_list:
result = " ".join(st.split()[:n])
# the length of the sliced numbers without whitespaces
result_len = len(st.split()[:n])
if arr_len>result_len:
for i in range((arr_len)-result_len):
result += " N"
print("result: "+ result)
答案 1 :(得分:0)
适应其他SO中使用的想法填充数组:
In [481]: arr = np.arange(1,6)*np.ones((5,1),int).astype(object)
In [482]: arr
Out[482]:
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]], dtype=object)
In [483]: mask = slicer[:,None]<=np.arange(5)
In [484]: mask
Out[484]:
array([[False, False, True, True, True],
[False, False, False, True, True],
[False, True, True, True, True],
[False, False, False, True, True],
[False, False, False, False, False]])
In [485]: arr[mask] = None
In [486]: arr
Out[486]:
array([[1, 2, None, None, None],
[1, 2, 3, None, None],
[1, None, None, None, None],
[1, 2, 3, None, None],
[1, 2, 3, 4, 5]], dtype=object)