Numpy 2D 数组获取总数的百分比

Lin*_*nus 6 python numpy percentage python-3.x numpy-ndarray

我刚刚开始使用 numpy..

得到下面的 np 表,想计算每个单元格占列总数的百分比。

data = np.array([[7,16,17], [12,11,3]])
headers = ["Grundskola", "Gymn", "Akademisk"]

# tabulate data
table = tabulate(data, headers, tablefmt="github")

# output
print(table)

|   Grundskola |   Gymn |   Akademisk |
|--------------|--------|-------------|
|            7 |     16 |          17 |
|           12 |     11 |           3 |
Run Code Online (Sandbox Code Playgroud)

到:

|   Grundskola |   Gymn |   Akademisk |
|--------------|--------|-------------|
|           39%|    59% |         85% |
|           61%|    41% |         15% |
Run Code Online (Sandbox Code Playgroud)

我知道 np.sum(data2, axis=0/1) 会给我总数,但我如何使用它来计算数组。

数组的大小可以不同...

Ch3*_*teR 6

你可以试试这个。使用numpy.sumoveraxis = 0并将数组除以data轴 0 上的和。

data = np.array([[7, 16, 17],
                 [12, 11, 3]])

percentages = data/data.sum(axis=0) * 100

percentages
# array([[36.84210526, 59.25925926, 85.        ],
#        [63.15789474, 40.74074074, 15.        ]])
Run Code Online (Sandbox Code Playgroud)

现在,percentagestabulate函数中使用它。


您可以mini string language按如下所示对它们进行格式化。

perc = data / data.sum(axis=0)
# array([[0.36842105, 0.59259259, 0.85      ],
#        [0.63157895, 0.40740741, 0.15      ]])

print(np.array([[f"{i:.2%}" for i in val] for val in perc]))
# [['36.84%' '59.26%' '85.00%']
#  ['63.16%' '40.74%' '15.00%']]
Run Code Online (Sandbox Code Playgroud)