如何在Python中显示数组的百分比

3

如何打印数组的百分比?

例如:

如果我有一个数组:

x = np.array([2,3,1,0,4,3,5,4,3,2,3,4,5,10,15,120,102,10])

如何将数组的一部分设置为零?如果我想保留数组的前10%不变,并将剩余的90%更改为零,应该怎么做呢?

提前谢谢您。


长度的百分之几? - Marcin
1
这个话题涉及到显示百分比,但正文讨论的是设置百分比。那么这个主题需要修复吗? - davejagoda
5个回答

12

这将在前面大致给你90%的结果:

x[0:int(len(x)*0.9)]

背面的90%(通过跳过前10%):

x[int(len(x)*0.1):]

因此,要将最后的90%设置为零:

x[int(len(x)*0.1):] = 0

你错过了这一步:并将剩余90%的数组更改为零。请添加 x[(len(x)*0.1):] = 0 - daniel451
x[len(x)*0.1:] = 0 会抛出一个错误:TypeError: 只能分配可迭代对象 - levi
@levi:当你遇到错误时,你使用的NumPy版本是什么? - John Zwinck
1
请注意,使用非整数数字作为数组的索引目前已被弃用(自numpy 1.8.0起)。我猜向前兼容的方法应该是先将len(x)*0.1的结果转换为int,然后再使用它。 - Simon Gibbons
使用int()会导致近似误差,最好使用round代替。 - Edoardo Guerriero
@EdoardoGuerriero:四舍五入只是看待事物的不同方式。如果我说“给我一打鸡蛋的90%”,我应该得到10个还是11个?这没有正确答案。 - John Zwinck

2
您可以这样做:
import numpy as np

x = np.array([2,3,1,0,4,3,5,4,3,2,3,4,5,10,15,120,102,10])

cut_off = int(0.1*len(x))

print(len(x), cut_off)
for idx in range(cut_off,len(x)):
    x[idx] = 0

在NumPy中,这非常低效。 - John Zwinck

1
x = [2,3,1,0,4,3,5,4,3,2,3,4,5,10,15,120,102,10]
index = 10 * len(x) / 100
x[index:] = [0]*(len(x) - 1 index )
print x
>>> x = [2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

1

Here is what I would do:

x = np.array([2,3,1,0,4,3,5,4,3,2,3,4,5,10,15,120,102,10])
change = round(0.9 * len(x)) # changing 90%
x[-change:] = 0 # change from last value towards beginning of array
print(x)

yielding

[2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

0

做这个工作吗?

x = np.array([2,3,1,0,4,3,5,4,3,2,3,4,5,10,15,120,102,10])
j=len(x)
k=(j/100)*10
for index in range(k,j):
   x[index]=0

在NumPy中,这是非常低效的。 - John Zwinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接