根据数字对数组的行进行分组
Posted
技术标签:
【中文标题】根据数字对数组的行进行分组【英文标题】:Group the lines of an array based on a number 【发布时间】:2022-01-19 11:07:33 【问题描述】:我有一个包含 100 行和 5 列的数组。我想将它们分组到单独的数组中,基于 在第 5 列中给出的数字上。第 5 列包含从 0 到 N (0, 1, 2, ...N) 的整数。
所以对于 N=2,第 5 列中的值将是 0、1、2
因此我想创建 3 个数组,其中行分别具有 0、1、2。
这里是 Python 中 N=3 的代码:
df_array_with_clusters=...
for i in range(len(df_array_with_clusters)):
if df_array_with_clusters[i, -1]== 0:
cluster_0[i,:] = df_array_with_clusters[i, :-1]
elif df_array_with_clusters[i, -1]== 1:
cluster_1[i,:] = df_array_with_clusters[i, :-1]
else:
cluster_2[i,:] = df_array_with_clusters[i, :-1]
谢谢
【问题讨论】:
你问的问题太抽象了。您是否只是在寻找人类可读的算法?数组如何有 100 行和 5 列?它是数组数组还是多维数组?如果您正在寻求代码方面的帮助,使用什么语言? 对不起,我正在寻找 python 的代码。这是一个 numpy 数组。当我有 N=3 时我做了一些事情,所以第 5 列中的数字是 0,1,2。我将发布上面的代码!谢谢 我已添加标签以帮助潜在专家找到此问题。我希望你能找到你的答案。我不擅长python。 这个问题不是很清楚。您能否添加一个示例输入以及您期望从中得到什么输出? @NikolasSpiliopoulos 我已经编辑了答案以添加 NumPy 解决方案。如果我的回答解决了您的问题,请告诉我。 【参考方案1】:使用列表的解决方案
这样的东西应该适合你:
def distribute_into_clusters(data, N):
clusters=[[] for _ in range(N)]
for row in data:
cluster_id = row[-1]
clusters[cluster_id].append(row[:-1])
return clusters
返回的是一个簇列表,每个簇都是一个行列表,如 np.array。
如果您希望每个集群改为一个数组,请将 return 语句更改为:
return [np.array(cluster) for cluster in clusters]
NumPy 解决方案
这是第二个解决方案,它在 NumPy 中将数据分布到集群中。可能效率更高。
def distribute_into_clusters(data, N):
return [
data[[row[-1] == cluster_id for row in data]][:,:-1]
for cluster_id in range(N)
]
[row[-1] == cluster_id for row in data]
给了我一个布尔值列表,指示哪些行属于 cluster_id
。
data[...]
对数据进行切片,只保留 bool 为 True 的行
[:,:-1]
删除集群 ID 列
【讨论】:
您好,感谢您的回答!我会尽快看到,并再次通知您,谢谢! 您好,代码运行良好,但是我没有看到任何集群作为控制台变量的结果。由于我是 python 的初学者,我已将变量 N 和数据(我自己的数组)放在 def 下方,但它似乎仍然没有做任何事情,谢谢! 保持我的函数如图所示(任一版本),并像这样调用它:clusters = distribute_into_clusters(df_array_with_clusters, 3)
。然后print(clusters)
将打印所有簇,print(clusters[0])
(将 0 更改为您要查看的簇的索引)将打印一个簇。
def
语法定义了一个函数,但在你调用它之前它不会运行。以上是关于根据数字对数组的行进行分组的主要内容,如果未能解决你的问题,请参考以下文章