为什么在Python中向np.array和列表中添加项目时方式不同

10 浏览
0 Comments

为什么在Python中向np.array和列表中添加项目时方式不同

我有一个代码,看起来像这样:\n

list_a = []
arr = np.array([])
for _ in range(1,101):
    list_a.append(np.random.randint(1,1001,100).mean())
    arr = np.append(arr, np.random.randint(1,1001,100).mean())
print(f'转换为np.array后的平均值 - {np.array(list_a).mean()}')
print(f'传统的平均值 - {sum(list_a)/len(list_a)}')
print(f'仅使用arr.mean - {arr.mean()}')
print(f'第一个数组元素 - {arr[0]}')
print(f'第一个列表元素 - {list_a[0]}')
print(f'最后一个arr元素 - {arr[99]}')
print(f'最后一个列表元素 - {list_a[99]}')

\n这样打印出来:\n

转换为np.array后的平均值 - 498.9785
传统的平均值 - 498.97850000000005
仅使用arr.mean - 499.5889000000001
第一个数组元素 - 510.76
第一个列表元素 - 518.8
最后一个arr元素 - 527.54
最后一个列表元素 - 521.58

\n为什么我得到的均值不相等,为什么第一个和最后一个元素(我假设其余元素也是)在同一个循环中却不相等?将列表转换为np.array并获取平均值与仅将项目添加到np.array并获取平均值之间有什么区别?

0
0 Comments

问题的出现的原因是因为在向np.array和list中添加元素时,使用了不同的方法。当向np.array中添加元素时,使用了np.append()函数,而向list中添加元素时,使用了append()方法。np.append()函数会创建一个新的数组,并将原数组和要添加的值一起复制到新数组中,而list的append()方法则直接在原列表的末尾添加元素。

解决方法是将要添加的元素先存储在一个变量中,然后分别使用append()方法将元素添加到list和np.array中。这样可以确保两个列表中的元素相同。

以下是解决问题的代码:

import numpy as np
list_a = []
arr = np.array([])
for _ in range(1, 101):
    value = np.random.randint(1, 1001, 100).mean()
    list_a.append(value)
    arr = np.append(arr, value)
print(f'casted list to np.array mean - {np.array(list_a).mean()}')
print(f'old school average - {sum(list_a)/len(list_a)}')
print(f'just arr.mean - {arr.mean()}')
print(f'first array element - {arr[0]}')
print(f'first list element - {list_a[0]}')
print(f'last arr element - {arr[99]}')
print(f'last list element - {list_a[99]}')

第一个输出的平均值和第二个输出的平均值之间的差异是由print()函数的表示方式引起的,实际上,这两个平均值的差异只有0.000000000000005。

0
0 Comments

为什么在Python中向np.array和list追加元素时,均值不同?原因是数据不同。因为每次循环时,都会使用np.random.randint(1,1001,100).mean()来确定要追加到list_a的值,然后再使用相同方法来确定要追加到arr的值。np.random.randint用于产生随机数,因此在这两次调用中会产生不同的数组,所以均值不同,存储的值也不同。

当将list转换为np.array并计算均值与仅追加元素到np.array并计算均值之间是否有区别?在Python中,并没有所谓的“转换”,但是这两种方式得到的结果是相同的。虽然你的输出结果在一种情况下显示为498.9785,在另一种情况下显示为498.97850000000005,但这些结果非常接近。浮点数计算有时会涉及到一小部分的不精确性。

最后一部分是误导性的。差异很可能是由于显示偏好而不是数据实际差异所导致的。在OP报告的数据中,显示的小数位数是不同的,这让我对这种解释产生了怀疑。除了在格式字符串中明确指定之外,我也不知道是什么原因导致Python显示浮点值的精度不同。

Numpy数组和Python浮点数具有不同的repr。话虽如此,我理解你的观点。

谢谢,我忽略了一个如此明显的答案。不确定你为什么说在Python中没有所谓的“转换”,我认为转换就是将一种数据类型转换为另一种数据类型。

嗯,并不是每个人都使用完全相同的定义,但我认为与stackoverflow.com/questions/4337306/...中的基本定义类似。

0