实验楼 - Python Numpy 100题实验(四)linspace()函数等

创建一个5 * 5 的矩阵,其中每行都是1-5

a = np.zeros((5, 5), dtype = np.int)
a += np.arange(1,6)

创建一个长度为 5 的等间隔一维数组,值域范围从0到1,但是不包括 0 和 1

a = np.linspace(0 ,1, 6, endpoint=False)[1:]

题目有两个要求:

  • 长度为5,等间隔
  • 不包括起始点0和1

首先等间隔数组(等差)要用到linspace()函数,这个函数的调用格式如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • start, stop 就是指定的起始点
  • num 默认取值是50 ,也就是数组长度是50
  • endpoint 用于指定结束点是否包括进数组中
  • retstep 用于返回间隔的大小,默认值是False不返回步长
  • dtype 指定数据的类型默认下是返回浮点数

举个例子:

a = np.linspace(0, 5, 6, retstep=True)
print(a)
# a = (array([0., 1., 2., 3., 4., 5.]), 1.0)    会附加返回步长

在这道题目中,还有一个条件,不包括开始点,不包括结束点我们可以传入False,而开始点,则是通过一个切片简单实现了,在指定数组长度的时候指定为6,然后从第二个元素开始取,这样正好得到长度为5的等差数组

创建长度为10的随机数组并进行排序

a = np.random.random(10)
a.sort()
a
#array([0.23072732, 0.45098883, 0.48883051, 0.50154215, 0.50358937,
#       0.57383024, 0.58439302, 0.81625253, 0.82576855, 0.86943527])

随机数函数的简单应用

创建一个3*3的数组,并按照列排序

a = np.random.randint(1, 10, (3, 3))
print(a)
a.sort(axis=0)
print(a)

#[[4 9 3]
# [6 2 7]
# [7 8 9]]

#[[4 2 3]
# [6 8 7]
# [7 9 9]]

像sort(),mean(),max()等等函数都可以传入axis参数,表示按照行(列)进行处理,axis=1表示按列,axis=0表示按行

创建一个长度为5的一维数组,并将其中的最大值替换成 0

array.argmax()函数的简单应用,这个函数也是可以传入axis参数的

a = np.random.randint(1, 50, 5)
print(a)      # array([27, 33, 14, 30, 12])
a[a.argmax()] = 0
print(a)      # array([27,  0, 14, 30, 12])

将 float32 转化为 int32

a = a.astype(np.int32)

创建一个二维数组,并对第二列从上往下排序

如果只是临时排序:

a = np.random.randint(1, 10, (5,5))
a[a[:,2].argsort()]

如果保留排序结果

a = np.random.randint(1, 10, (5,5))
a[:, 2].sort()

argsort()返回的一个数组,是进行排序之后的原来元素的位置,例如:

a = np.random.randint(1, 10, 4)
print(a)             # array([4, 5, 7, 3])

print(a.argsort())     # array([3, 0, 1, 2], dtype=int64)

保存结果的排序自然直接对第二列排序就可以了。

猜你喜欢

转载自blog.csdn.net/sinat_34328764/article/details/82938885