NUMPY基础
# 基础语法
# 输出[1 2 5 8],类型为<class 'numpy.ndarray'>,从python列表构建numpy数组
a = np.array([1, 2, 5, 8])
# 制造一系列等距点,组成数组,前者为浮点数,后者为整数
np.linspace(10, 20), np.arange(10, 20)
# x的正弦,x可以是一个数组。类似的还有cos、tan、log、log10、log2、exp、sqrt、abs、ceil、floor等等
np.sin(x)
# a的形状,只有一个数值的,称为一维数组,也就是向量;两个数值的,成为二维数组,也就是矩阵,以此类推
a.shape
# a的维数
len(a.shape)
# a的切片,维度用逗号分隔,用法与list相同
a[1:99:2, ::]
# 产生全1、全0的数据
np.ones(len(a)), np.ones(len(b))
# 产生一个跟a一样大的数组,其中的值是跟128比较的值(True、False),通常用作过滤器(布尔索引)
a > 128
# 保留过滤器中为True的值
a[过滤器]
# 产生n个0~1的随机值
np.random.random(n)
埃拉托斯特尼筛法:得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
import numpy as np
a = np.arange(1, 101)
# 在循环中取平方数,所以循环最大值为数组长度开方
n_max = int(np.sqrt(len(a)))
# 生成一个长度为len(a),类型为bool的一维数组,ones为True,zeros为False
is_prime = np.ones(len(a), dtype=bool)
# 将1排除
is_prime[0] = False
# 循环从2开始计算,n_max
for i in range(2, n_max):
# 如果i在列表中为True,则表示是素数,a[is_prime]展示的是a中为True的元素
if i in a[is_prime]:
# 如果是素数的话,对它取平方,按步长为i计算,取False,因为后续数都能被i除不再是素数了(列表从0开始这里-1)
is_prime[(i**2) - 1::i] = False
# 输出素数
print(a[is_prime])
蒙特卡罗方法求圆周率:所以这里求PI的公式为:4*(落在圆内的点/总点)
import numpy as np
# 随机生成的点数
n_dots = 1000000
# 随机生成n个0~1的数
x = np.random.random(n_dots)
y = np.random.random(n_dots)
# x平方+y平方 开方,如果小于1则说明在圆内
distance = np.sqrt(x**2 + y**2)
in_circle = distance[distance < 1]
# 正方形面积为:2r*2r,圆面积为:PI*r*r,圆的面积比上正方形的面积为:PI/4
# 所以这里求PI的公式为:4*(落在圆内的点/总点)
pi = 4 * float(len(in_circle)) / n_dots
print(pi)
标签:prime,机器,random,len,用法,素数,数组,np,numpy
From: https://www.cnblogs.com/junun/p/17134888.html