根据 python 中另一个列表的最大值对数组的列索引进行分组
Grouping column indices of an array based on max value of another list in python
假设我有一个数组
k= array([[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
假设在对数组中的每一列进行计算后,我分别得到 array([0.6,0.4,0.75,0.2,0.75])
,这样:
column1 的计算即 array([1,5,2,4,1,7])
的计算结果为 0.6,
column2 的计算即 array([2,6,5,7,2,8])
的计算结果为 0.4,
column3 的计算即 array([3,7,4,6,4,9])
的计算结果为 0.75,依此类推。
设计算列表为m。这样
m=array([0.6,0.4,0.75,0.2,0.75])
到目前为止,我已经计算了数组 k
中的单个列。现在我想根据列表 m
中最大的浮点元素对列表 m
中的元素进行分组,然后在 k 上再次计算。例如:
m[2]=m[4]=0.75
(数组中最大的数字),这意味着数组 k
中列的索引 2 和索引 4 是最大的。因此,保持该索引号通用我想对 k[:,2] with k[:,0],k[:,2] with k[:,1],k[:,2] with k[:,3] and similarly k[:,4] with k[:,0],k[:,4] with k[:,1],k[:,4] with k[:,3]
进行分组并在 k
、
上再次计算
这样分组 k[:,2] with k[:,0]
意味着:
k0_2=array([[1,3], k1_2=array([[2,3], k3_2=array([[4,3],
[5,7], [6,7], [8,7],
[2,4], [5,4], [7,4],
[4,6], [7,6], [8,6],
[1,4], [2,4], [3,4],
[7,9]]) [8,9]]) [5,9]])
k0_4=array([[1,5], k1_4=array([[2,5], k3_4=array([[4,5],
[5,9], [6,9], [8,9],
[2,9], [5,3], [7,3],
[4,2], [7,2], [8,2],
[1,6], [2,6], [3,6],
[7,4]]) [8,4]]) [5,4]])
谁能给我任何关于根据 list m
的最大值对 array k
的列索引进行分组的线索,如上所示。
这有帮助吗?
import numpy as np
k= np.array(
[[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
cols=[2,4]
others = [c for c in range(k.shape[1]) if c not in cols]
groups = [k[:,[o, c]] for c in cols for o in others]
for g in groups:
print(g)
print('')
这给了我
[[1 3]
[5 7]
[2 4]
[4 6]
[1 4]
[7 9]]
[[2 3]
[6 7]
[5 4]
[7 6]
[2 4]
[8 9]]
[[4 3]
[8 7]
[7 4]
[8 6]
[3 4]
[5 9]]
[[1 5]
[5 9]
[2 3]
[4 2]
[1 6]
[7 4]]
[[2 5]
[6 9]
[5 3]
[7 2]
[2 6]
[8 4]]
[[4 5]
[8 9]
[7 3]
[8 2]
[3 6]
[5 4]]
我认为您的 k_04 数组中存在印刷错误。我觉得k_04[2,10应该是3,不是9,是吧?
这是我和我的一个朋友想出的另一个解决方案:
import numpy as np
k= np.array(
[[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
cols=[2,4]
kl = np.delete(k, np.s_[cols],1)
for i in range(len(cols)):
for j in range(len(kl[0])):
print np.column_stack((k[:,cols[i]],kl[:,j]))
假设我有一个数组
k= array([[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
假设在对数组中的每一列进行计算后,我分别得到 array([0.6,0.4,0.75,0.2,0.75])
,这样:
column1 的计算即 array([1,5,2,4,1,7])
的计算结果为 0.6,
column2 的计算即 array([2,6,5,7,2,8])
的计算结果为 0.4,
column3 的计算即 array([3,7,4,6,4,9])
的计算结果为 0.75,依此类推。
设计算列表为m。这样
m=array([0.6,0.4,0.75,0.2,0.75])
到目前为止,我已经计算了数组 k
中的单个列。现在我想根据列表 m
中最大的浮点元素对列表 m
中的元素进行分组,然后在 k 上再次计算。例如:
m[2]=m[4]=0.75
(数组中最大的数字),这意味着数组 k
中列的索引 2 和索引 4 是最大的。因此,保持该索引号通用我想对 k[:,2] with k[:,0],k[:,2] with k[:,1],k[:,2] with k[:,3] and similarly k[:,4] with k[:,0],k[:,4] with k[:,1],k[:,4] with k[:,3]
进行分组并在 k
、
这样分组 k[:,2] with k[:,0]
意味着:
k0_2=array([[1,3], k1_2=array([[2,3], k3_2=array([[4,3],
[5,7], [6,7], [8,7],
[2,4], [5,4], [7,4],
[4,6], [7,6], [8,6],
[1,4], [2,4], [3,4],
[7,9]]) [8,9]]) [5,9]])
k0_4=array([[1,5], k1_4=array([[2,5], k3_4=array([[4,5],
[5,9], [6,9], [8,9],
[2,9], [5,3], [7,3],
[4,2], [7,2], [8,2],
[1,6], [2,6], [3,6],
[7,4]]) [8,4]]) [5,4]])
谁能给我任何关于根据 list m
的最大值对 array k
的列索引进行分组的线索,如上所示。
这有帮助吗?
import numpy as np
k= np.array(
[[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
cols=[2,4]
others = [c for c in range(k.shape[1]) if c not in cols]
groups = [k[:,[o, c]] for c in cols for o in others]
for g in groups:
print(g)
print('')
这给了我
[[1 3]
[5 7]
[2 4]
[4 6]
[1 4]
[7 9]]
[[2 3]
[6 7]
[5 4]
[7 6]
[2 4]
[8 9]]
[[4 3]
[8 7]
[7 4]
[8 6]
[3 4]
[5 9]]
[[1 5]
[5 9]
[2 3]
[4 2]
[1 6]
[7 4]]
[[2 5]
[6 9]
[5 3]
[7 2]
[2 6]
[8 4]]
[[4 5]
[8 9]
[7 3]
[8 2]
[3 6]
[5 4]]
我认为您的 k_04 数组中存在印刷错误。我觉得k_04[2,10应该是3,不是9,是吧?
这是我和我的一个朋友想出的另一个解决方案:
import numpy as np
k= np.array(
[[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9],
[2, 5, 4, 7, 3],
[4, 7, 6, 8, 2],
[1, 2, 4, 3, 6],
[7, 8, 9, 5, 4]])
cols=[2,4]
kl = np.delete(k, np.s_[cols],1)
for i in range(len(cols)):
for j in range(len(kl[0])):
print np.column_stack((k[:,cols[i]],kl[:,j]))