美文网首页
numpy练习100题(51-75)

numpy练习100题(51-75)

作者: 海盗船长_coco | 来源:发表于2019-12-24 15:24 被阅读0次
  1. 创建一个表示位置(x,y)和颜色(r,g,b)的结构化数组(提示: dtype)
Z = np.zeros(10, [('position', [('x', float, 1),
                                ('y', float, 1)]),
                  ('color', [('r', float, 1),
                             ('g', float, 1),
                             ('b', float, 1)])])
  1. 对一个表示坐标形状为(100,2)的随机向量,找到点与点的距离(提示: np.atleast_2d, T, np.sqrt)
Z = np.random.random((100, 2))
# 方法一
X, Y = np.atleast_2d(Z[:, 0], Z[:, 1])
D = np.sqrt((X - X.T) ** 2 + (Y - Y.T) ** 2)
# 方法二
# Much faster with scipy
# Thanks Gavin Heverly-Coulson (#issue 1)
import scipy.spatial

D = scipy.spatial.distance.cdist(Z, Z)
  1. 如何将32位的浮点数(float)转换为对应的整数(integer)?(提示: astype(copy=False))
Z = np.arange(10, dtype=np.float32)
Z = Z.astype(np.int32, copy=False)
  1. 如何读取以下文件?(提示: np.genfromtxt)
'''data.txt
1, 2, 3, 4, 5
6, 7, 8, 9,10
'''
data = np.genfromtxt('data.txt', delimiter=',')
  1. 对于numpy数组,enumerate的等价操作是什么?(提示: np.ndenumerate, np.ndindex)
Z = np.arange(9).reshape(3, 3)
for index, value in np.ndenumerate(Z):
    print (index, value)

for index in np.ndindex(Z.shape):
    print (index, Z[index])
  1. 生成一个通用的二维Gaussian-like数组(提示: np.meshgrid, np.exp)
X, Y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
D = np.sqrt(X * X + Y * Y)
sigma, mu = 1.0, 0.0
G = np.exp(-((D - mu) ** 2 / (2.0 * sigma ** 2)))
  1. 对一个二维数组,如何在其内部随机放置p个元素?(提示: np.put, np.random.choice)
n = 10
p = 3
Z = np.zeros((n, n))
 # 将二维的index转为一维的index 
np.put(Z, np.random.choice(range(n * n), p, replace=False), 1) 
  1. 减去一个矩阵中的每一行的平均值(提示: mean(axis=,keepdims=))
X = np.random.rand(5, 10)
# 方法1
# Recent versions of numpy
Y = X - X.mean(axis=1, keepdims=True)
# 方法2
# Older versions of numpy
Y = X - X.mean(axis=1).reshape(-1, 1)
  1. 如何通过第n列对一个数组进行排序?(提示: argsort)未想到
Z = np.random.randint(0, 10, (3, 3))
z = Z[Z[:, 1].argsort()]
  1. 如何检查一个二维数组是否有空列?(提示: any, ~)
Z = np.random.randint(0, 3, (3, 10))
print(Z)
print((~Z.any(axis=0)).any())#若有一列全为0则返回True
  1. 从数组中的给定值中找出最近的值(提示: np.abs, argmin, flat)
Z = np.random.uniform(0, 1, 10)
z = 0.5
m = Z[np.abs(Z - z).argmin()]
  1. 如何用迭代器(iterator)计算两个分别具有形状(1,3)和(3,1)的数组?(提示: np.nditer)
A = np.arange(3).reshape(3, 1)
B = np.arange(3).reshape(1, 3)
it = np.nditer([A, B, None])
for x, y, z in it:
    z[...] = x + y
  1. 创建一个具有name属性的数组类(提示: class方法)不会
class NamedArray(np.ndarray):

    def __new__(cls, array, name="no name"):
        obj = np.asarray(array).view(cls)
        obj.name = name
        return obj

    def __array_finalize__(self, obj):
        if obj is None:
            return
        self.info = getattr(obj, 'name', "no name")

Z = NamedArray(np.arange(10), "range_10")
  1. 考虑一个给定的向量,如何对由第二个向量索引的每个元素加1(小心重复的索引)?(提示: np.bincount | np.add.at)
Z = np.ones(10)
# 方法1
I = np.random.randint(0, len(Z), 20)
Z += np.bincount(I, minlength=len(Z))
# 方法2
np.add.at(Z, I, 1)
  1. 根据索引列表(I),如何将向量(X)的元素累加到数组(F)?(提示: np.bincount)
X = [1, 2, 3, 4, 5, 6]
I = [1, 3, 9, 3, 4, 1]
# F[0]=0,F[1]=X[0]+X[5]=1+6=7,F[2]=0
# F[3]=X[1]+X[3]=2+4=6,F[4]=X[5]=5,F[5]=F[6]=F[7]=F[8]=0,F[9]=X[2]=3
F = np.bincount(I, X)  # [0. 7. 0. 6. 5. 0. 0. 0. 0. 3.]
  1. 考虑一个(dtype=ubyte) 的 (w,h,3)图像,计算其唯一颜色的数量(提示: np.unique)
w, h = 16, 16
I = np.random.randint(0, 2, (h, w, 3)).astype(np.ubyte)
# Note that we should compute 256*256 first.
# Otherwise numpy will only promote F.dtype to 'uint16' and overflow will occur
F = I[..., 0] * (256 * 256) + I[..., 1] * 256 + I[..., 2]
  1. 考虑一个四维数组,如何一次性计算出最后两个轴(axis)的和?(提示: sum(axis=(-2,-1)))
A = np.random.randint(0, 10, (3, 4, 3, 4))
# 方法一
# solution by passing a tuple of axes (introduced in numpy 1.7.0)
sum = A.sum(axis=(-2, -1))
# 方法二
# solution by flattening the last two dimensions into one
# (useful for functions that don't accept tuples for axis argument)
sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1)
  1. 考虑一个一维向量D,如何使用相同大小的向量S来计算D子集的均值?(提示: np.bincount)
D = np.random.uniform(0, 1, 100)
S = np.random.randint(0, 10, 100)
D_sums = np.bincount(S, weights=D)
D_counts = np.bincount(S)
D_means = D_sums / D_counts
print(D_means)
  1. 如何获得点积 dot prodcut的对角线?(提示: np.diag)
A = np.random.uniform(0, 1, (5, 5))
B = np.random.uniform(0, 1, (5, 5))
# Slow version
np.diag(np.dot(A, B))
# Fast version
np.sum(A * B.T, axis=1)
# Faster version
np.einsum("ij,ji->i", A, B)
  1. 考虑一个向量[1,2,3,4,5],如何建立一个新的向量,在这个新向量中每个值之间有3个连续的零?(提示: array[::4])
# Author: Warren Weckesser
Z = np.array([1, 2, 3, 4, 5])
nz = 3
Z0 = np.zeros(len(Z) + (len(Z) - 1) * (nz))
Z0[::nz + 1] = Z
  1. 考虑一个维度(5,5,3)的数组,如何将其与一个(5,5)的数组相乘?(提示: array[:, :, None])
A = np.ones((5, 5, 3))
B = np.ones((5, 5)) * 2
C = A * B[:, :, None]
  1. 如何对一个数组中任意两行做交换?(提示: array[[]] = array[[]])
A = np.arange(25).reshape(5, 5)
A[[0, 1]] = A[[1, 0]]
  1. 考虑一个可以描述10个三角形的triplets,找到可以分割全部三角形的line segment (提示: repeat, np.roll, np.sort, view, np.unique)
faces = np.random.randint(0, 100, (10, 3))
F = np.roll(faces.repeat(2, axis=1), -1, axis=1)
F = F.reshape(len(F) * 3, 2)
F = np.sort(F, axis=1)
G = F.view(dtype=[('p0', F.dtype), ('p1', F.dtype)])
G = np.unique(G)
  1. 给定一个二进制的数组C,如何产生一个数组A满足np.bincount(A)==C(提示: np.repeat)
C = np.bincount([1, 1, 2, 3, 4, 4, 6])
A = np.repeat(np.arange(len(C)), C)
  1. 如何通过滑动窗口计算一个数组的平均数?(提示: np.cumsum)未想到
def moving_average(a, n=3):
    ret = np.cumsum(a, dtype=float)  # 返回累加和
    temp1 = ret[n:]
    temp2 = ret[:-n]
    ret[n:] = ret[n:] - ret[:-n]  # 前n个累加和
    return ret[n - 1:] / n


Z = np.arange(20)
print(moving_average(Z, n=3))

相关文章

  • numpy练习100题(51-75)

    创建一个表示位置(x,y)和颜色(r,g,b)的结构化数组(提示: dtype) 对一个表示坐标形状为(100,2...

  • numpy练习100题(76-100)

    后面的题目基本都写不出来,平时遇到的也不多,为了文章的完整性,将答案贴出。 考虑一维数组Z,构建一个二维数组, 其...

  • numpy练习100题(26-50)

    下面脚本运行后的结果是什么?(提示: np.sum) 考虑一个整数向量Z,下列表达合法的是哪个? 下列表达式的结果...

  • numpy练习100题(1-25)

    导入numpy库并简写为 np 打印numpy的版本和配置说明 创建一个长度为10的空向量 如何找到任何一个数组的...

  • 50道练习带你玩转Pandas

    受到numpy100题的启发,我们制作了pandas50题。 Pandas 是基于 NumPy 的一种数据处理工具...

  • 口算2

    口算练习2,共100题用时8分钟,对99题

  • Rust语言编程实例100题-044

    Rust语言编程实例100题-044 题目:在第41题和43题已经练习过static修饰变量的用法。今天再来练习下...

  • Rust语言编程实例100题-045

    Rust语言编程实例100题-045 题目:在第39题和42题已经练习过选择排序,插入排序,冒泡排序。今天再来练习...

  • numpy 100道通关题(二)

    34. How to get all the dates corresponding to the month o...

  • numpy 100道通关题(三)

    64. Consider a given vector, how to add 1 to each element...

网友评论

      本文标题:numpy练习100题(51-75)

      本文链接:https://www.haomeiwen.com/subject/quhfoctx.html