Python numpy矩阵计数不同
假设有一个numpy包含以下数据结构:Python numpy矩阵计数不同,python,numpy,Python,Numpy,假设有一个numpy包含以下数据结构: import numpy as np a = np.array([['2','W','A'], ['3', 'R', 'A'], ['4', 'W', 'R'], ['2', 'E', 'R'], ['4', 'E', 'Y'], ['3', 'E', 'Y']]) 需要在第三列中汇总唯一实例的外观数并返回numpy,以便
import numpy as np
a = np.array([['2','W','A'],
['3', 'R', 'A'],
['4', 'W', 'R'],
['2', 'E', 'R'],
['4', 'E', 'Y'],
['3', 'E', 'Y']])
需要在第三列中汇总唯一实例的外观数并返回numpy,以便返回以下结果:
例如,A的值在第三列中出现两次,因此结果将是“A”“2”
类似地,对第二列和第三列中的唯一值求和,并在以下结构中返回numpy:
例如,第二列中的E值与第三列中的Y值一起出现两次,因此结果将为“E”Y“2”。设置代码
import pandas as pd
import numpy as np
a = np.array(
[['2', 'W', 'A'],
['3', 'R', 'A'],
['4', 'W', 'R'],
['2', 'E', 'R'],
['4', 'E', 'Y'],
['3', 'E', 'Y']],
)
Pandas非常适合这种情况,并在后端利用numpy。例如,可以获得第二列、第三列计数,如下所示:
df = pd.DataFrame(a)
cols = [1,2]
df[cols].value_counts().astype("str").reset_index().values
结果:
array([['E', 'Y', '2'],
['W', 'R', '1'],
['W', 'A', '1'],
['R', 'A', '1'],
['E', 'R', '1']], dtype=object)
设置代码
import pandas as pd
import numpy as np
a = np.array(
[['2', 'W', 'A'],
['3', 'R', 'A'],
['4', 'W', 'R'],
['2', 'E', 'R'],
['4', 'E', 'Y'],
['3', 'E', 'Y']],
)
Pandas非常适合这种情况,并在后端利用numpy。例如,可以获得第二列、第三列计数,如下所示:
df = pd.DataFrame(a)
cols = [1,2]
df[cols].value_counts().astype("str").reset_index().values
结果:
array([['E', 'Y', '2'],
['W', 'R', '1'],
['W', 'A', '1'],
['R', 'A', '1'],
['E', 'R', '1']], dtype=object)
对于第一种情况,可以使用np.unique,并指定axis=0以将行制成表格:
def tabulate_array(x,columns):
idx,counts = np.unique(x[:,columns],return_counts=True,axis=0)
return [list(idx[i]) + list(str(counts[i])) for i in range(len(counts))]
连接计数和列表的最后一部分可能会进一步细化,但现在它将为您提供字符串输出,例如:
tabulate_array(a,[2])
[['A', '2'], ['R', '2'], ['Y', '2']]
tabulate_array(a,[1,2])
[['E', 'R', '1'],
['E', 'Y', '2'],
['R', 'A', '1'],
['W', 'A', '1'],
['W', 'R', '1']]
对于第一种情况,可以使用np.unique,并指定axis=0以将行制成表格:
def tabulate_array(x,columns):
idx,counts = np.unique(x[:,columns],return_counts=True,axis=0)
return [list(idx[i]) + list(str(counts[i])) for i in range(len(counts))]
连接计数和列表的最后一部分可能会进一步细化,但现在它将为您提供字符串输出,例如:
tabulate_array(a,[2])
[['A', '2'], ['R', '2'], ['Y', '2']]
tabulate_array(a,[1,2])
[['E', 'R', '1'],
['E', 'Y', '2'],
['R', 'A', '1'],
['W', 'A', '1'],
['W', 'R', '1']]
使用numpy,然后重新格式化
import numpy as np
a = np.array([['2','W','A'],
['3', 'R', 'A'],
['4', 'W', 'R'],
['2', 'E', 'R'],
['4', 'E', 'Y'],
['3', 'E', 'Y']])
unique, counts = np.unique(a[:, 2], return_counts=True)
result = np.vstack([unique, counts]).T
print(result)
关于第二个问题:
如果您想要避免for循环或列表理解,并且坚持使用纯numpy,并且愿意放弃输出的精确格式,您可以这样做
ind_col = np.core.defchararray.add(a[:, 1], a[:, 2])
unique, counts = np.unique(ind_col, return_counts=True)
result1 = np.vstack([unique, counts]).T
print(result1)
使用numpy,然后重新格式化
import numpy as np
a = np.array([['2','W','A'],
['3', 'R', 'A'],
['4', 'W', 'R'],
['2', 'E', 'R'],
['4', 'E', 'Y'],
['3', 'E', 'Y']])
unique, counts = np.unique(a[:, 2], return_counts=True)
result = np.vstack([unique, counts]).T
print(result)
关于第二个问题:
如果您想要避免for循环或列表理解,并且坚持使用纯numpy,并且愿意放弃输出的精确格式,您可以这样做
ind_col = np.core.defchararray.add(a[:, 1], a[:, 2])
unique, counts = np.unique(ind_col, return_counts=True)
result1 = np.vstack([unique, counts]).T
print(result1)
有趣的是,你想要的是实例数,但是字符串格式。也许是我,但你能明确表示唯一实例的外观数是什么意思吗?对不起。。。有一个数据错误,我编辑了这篇文章。有趣的是,你想要实例的数量,但是是字符串格式。也许是我,但是你能明确你所说的唯一实例的外观数量是什么意思吗?对不起。。。有一个数据错误,我编辑了这篇文章。