获取格式化数组的最大、最小和最后一个索引 Numpy Python
Getting the max, min and last index of formatted arrays Numpy Python
我想编写一个代码,针对每个唯一的 digit_vals
值一个一个地遍历 vals
数组中的列表。 digit_vals
值显示预期输出的第 n 个数字,因此由于 digit_vals
中的第一个值是 24 那么这意味着它之前的所有数字都将用零填充,第 24 个数字将包含来自 vals
的值。由于 digit_vals
中有两个 24,这意味着 vals
的第一个列表中的第二个索引是最后一个索引,因此需要 ([-3.3, -4.3]) 才能获得最大值:- 3.3,min:-4.3 and last index: -4.3
value out of ([-3.3, -4.3, 23.05, 23.08, 23.88, 3.72]
) 将包含预期输出中的第 24 个值。 vals
中第二个列表的第 4 个索引将包含 digit_vals
中第 27 个值的值,依此类推。 digit_vals
之间的空隙也将在结果中用零填充,因此在 24 和 27 之间,第 25 位和第 26 位分别有 2 个零。我想修改 out_arr
以创建一个具有相同值的二维数组,如 [[zeroes],[zeroes],[zeroes]]
。 max
和 min
值也不起作用 max/min(vals[r_ind][v_ind])
。我怎样才能修复这两个函数?
import pandas as pd
import numpy as np
digit_vals = np.array([24, 24, 27, 27, 27, 27,
28, 28, 28, 31])
vals = np.array([list([-3.3, -4.3, 23.05, 23.08, 23.88, 3.72]),
list([2.3, 2.05, 3.08, -4.88, 4.72]),
list([5.3, 2.05, 6.08, -13.88, -17.2]),
list([9.05, 6.08, 3.88, -13.72])], dtype=object)
def Monthly_CAP_movement():
#Val_ind is used to count the number of repetitive numbers
#out_ind shows the unique numbers
val_ind = []
out_ind = []
for ind, cnt in enumerate(np.bincount(digit_vals)):
if cnt > 0:
val_ind.append(cnt-1)
out_ind.append(ind)
# Turn the out_arr function to a 2 dimensional of coppied arrays [[zeroes],[zeroes],[zeroes]]
# Assign 3 of the zeroes one for each (last index, Max and Min)
out_arr = np.zeros(np.max(digit_vals)+1)
for r_ind, (v_ind, o_ind) in enumerate(zip(val_ind, out_ind)):
# Last Index Recording
out_arr[0][o_ind] = vals[r_ind][v_ind]
# Max Recording
out_arr[1][o_ind] = max(vals[r_ind][v_ind])
# Min Recording
out_arr[2][o_ind] = min(vals[r_ind][v_ind])
预期输出:
Last Index: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-4.3 0. 0. -4.88 6.08 0. 0. 9.05]
Max Value: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-3.3 0. 0. 3.08 6.08 0. 0. 9.05]
Min Value: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-4.3 0. 0. -4.88 2.05 0. 0. 9.05]
请查看 list/array numpy 中的切片(例如 list slicing or array slicing)。首先,out_arr
应该初始化为三行。然后,需要在包含所有值直到 v_ind
值的切片中计算最小值和最大值:
val_ind = []
out_ind = []
for ind, cnt in enumerate(np.bincount(digit_vals)):
if cnt > 0:
val_ind.append(cnt-1)
out_ind.append(ind)
out_arr = np.zeros((3, np.max(digit_vals)+1))
for r_ind, (v_ind, o_ind) in enumerate(zip(val_ind, out_ind)):
out_arr[0, o_ind] = vals[r_ind][v_ind]
out_arr[1, o_ind] = np.max(vals[r_ind][:v_ind+1])
out_arr[2, o_ind] = np.min(vals[r_ind][:v_ind+1])
切片不会 return 最后一个值,因此这就是您需要 v_ind+1
的原因,如上面的链接所述。
我想编写一个代码,针对每个唯一的 digit_vals
值一个一个地遍历 vals
数组中的列表。 digit_vals
值显示预期输出的第 n 个数字,因此由于 digit_vals
中的第一个值是 24 那么这意味着它之前的所有数字都将用零填充,第 24 个数字将包含来自 vals
的值。由于 digit_vals
中有两个 24,这意味着 vals
的第一个列表中的第二个索引是最后一个索引,因此需要 ([-3.3, -4.3]) 才能获得最大值:- 3.3,min:-4.3 and last index: -4.3
value out of ([-3.3, -4.3, 23.05, 23.08, 23.88, 3.72]
) 将包含预期输出中的第 24 个值。 vals
中第二个列表的第 4 个索引将包含 digit_vals
中第 27 个值的值,依此类推。 digit_vals
之间的空隙也将在结果中用零填充,因此在 24 和 27 之间,第 25 位和第 26 位分别有 2 个零。我想修改 out_arr
以创建一个具有相同值的二维数组,如 [[zeroes],[zeroes],[zeroes]]
。 max
和 min
值也不起作用 max/min(vals[r_ind][v_ind])
。我怎样才能修复这两个函数?
import pandas as pd
import numpy as np
digit_vals = np.array([24, 24, 27, 27, 27, 27,
28, 28, 28, 31])
vals = np.array([list([-3.3, -4.3, 23.05, 23.08, 23.88, 3.72]),
list([2.3, 2.05, 3.08, -4.88, 4.72]),
list([5.3, 2.05, 6.08, -13.88, -17.2]),
list([9.05, 6.08, 3.88, -13.72])], dtype=object)
def Monthly_CAP_movement():
#Val_ind is used to count the number of repetitive numbers
#out_ind shows the unique numbers
val_ind = []
out_ind = []
for ind, cnt in enumerate(np.bincount(digit_vals)):
if cnt > 0:
val_ind.append(cnt-1)
out_ind.append(ind)
# Turn the out_arr function to a 2 dimensional of coppied arrays [[zeroes],[zeroes],[zeroes]]
# Assign 3 of the zeroes one for each (last index, Max and Min)
out_arr = np.zeros(np.max(digit_vals)+1)
for r_ind, (v_ind, o_ind) in enumerate(zip(val_ind, out_ind)):
# Last Index Recording
out_arr[0][o_ind] = vals[r_ind][v_ind]
# Max Recording
out_arr[1][o_ind] = max(vals[r_ind][v_ind])
# Min Recording
out_arr[2][o_ind] = min(vals[r_ind][v_ind])
预期输出:
Last Index: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-4.3 0. 0. -4.88 6.08 0. 0. 9.05]
Max Value: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-3.3 0. 0. 3.08 6.08 0. 0. 9.05]
Min Value: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
-4.3 0. 0. -4.88 2.05 0. 0. 9.05]
请查看 list/array numpy 中的切片(例如 list slicing or array slicing)。首先,out_arr
应该初始化为三行。然后,需要在包含所有值直到 v_ind
值的切片中计算最小值和最大值:
val_ind = []
out_ind = []
for ind, cnt in enumerate(np.bincount(digit_vals)):
if cnt > 0:
val_ind.append(cnt-1)
out_ind.append(ind)
out_arr = np.zeros((3, np.max(digit_vals)+1))
for r_ind, (v_ind, o_ind) in enumerate(zip(val_ind, out_ind)):
out_arr[0, o_ind] = vals[r_ind][v_ind]
out_arr[1, o_ind] = np.max(vals[r_ind][:v_ind+1])
out_arr[2, o_ind] = np.min(vals[r_ind][:v_ind+1])
切片不会 return 最后一个值,因此这就是您需要 v_ind+1
的原因,如上面的链接所述。