<jupyter_start><jupyter_text>Universal functions 通用函数https://numpy.org/doc/stable/reference/ufuncs.html<jupyter_code>import numpy as np

# 打印两种类型之间是否可以转换
mark = {False: ' -', True: ' Y'}
def print_table(ntypes):
    print('X ' + ' '.join(ntypes))
    for row in ntypes:
        print(row, end='')
        for col in ntypes:
            print(mark[np.can_cast(row, col)], end='')
        print()

print_table(np.typecodes['All'])

# 输入参数的数量
np.add.nin,\
np.multiply.nin,\
np.power.nin,\
np.exp.nin



# 输出数量。

np.add.nout,\
np.multiply.nout,\
np.power.nout,\
np.exp.nout
# 参数的数量，包括可选参数
np.add.nargs,\
np.multiply.nargs,\
np.power.nargs,\
np.exp.nargs
# 类型数。ufunc可以在其上进行操作的数字NumPy类型的数量（总共有18种）
np.add.ntypes,\
np.multiply.ntypes,\
np.power.ntypes,\
np.exp.ntypes,\
np.remainder.ntypes

# 返回一个将输入->输出分组的列表。
np.add.types,\
np.multiply.types,\
np.power.types,\
np.exp.types,\
np.remainder.types

np.add.identity,\
np.multiply.identity,\
np.power.identity,\
np.exp.identity

np.exp.signature,\
np.add.signature


# reduce 通过沿一个轴应用ufunc，将s维减少1。
np.multiply.reduce([2,3,5])


X = np.arange(8).reshape((2,2,2))
X,\
np.add.reduce(X, 0),\
np.add.reduce(X),\
np.add.reduce(X, 1),\
np.add.reduce(X, 2)


a = np.array([10., np.nan, 10])
np.add.reduce([10], initial=5),\
np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10),\
np.add.reduce(a, where=~np.isnan(a))


# 累积将运算符应用于所有元素的结果。
np.add.accumulate([2, 3, 5]),\
np.multiply.accumulate([2, 3, 5])

I = np.eye(2)
I,np.add.accumulate(I, 0),np.add.accumulate(I),np.add.accumulate(I, 1)


# 在单个轴上使用指定的片执行(本地)reduce。
# If a is 1-D, the function ufunc.accumulate(a) is the same as ufunc.reduceat(a, indices)[::2] where indices is range(len(array) - 1)
# with a zero placed in every other element:
# indices = zeros(2 * len(a) - 1), indices[1::2] = range(1, len(a)).
# https://numpy.org/doc/stable/reference/generated/numpy.ufunc.reduceat.html#numpy.ufunc.reduceat
np.arange(8),\
np.add.reduceat(np.arange(8),[0,4, 1,5, 2,6, 3,7]),\
np.add.reduceat(np.arange(8),[0,4, 1,5, 2,6, 3,7])[::2]
# reduceat方法需要输入一个数组以及一个索引值列表作为参数
B = np.arange(9)
B3 = np.add.reduceat(B,[0,5,2,7])
print (B3)
# [10 5 20 15]
# 解析：第一步用到索引值列表中的0和5，实际上就是对数组中索引值在0到5之间的元素进行reduce操作。
print (np.add.reduce(B[0:5]))
# 第二步用到索引值5和2。由于2比5小，所以直接返回索引值为5的元素
print (np.add.reduce(B[5]))
# 第三步用到索引值2和7。这一步是对索引值在2到7之间的数组元素进行reduce操作
print (np.add.reduce(B[2:7]))
# 第四步用到索引值7。这一步是对索引值从7开始直到数组末端的元素进行reduce操作
print (np.add.reduce(B[7:]))


# 将ufunc op应用于A中的a和b中的b的所有对（a，b）。
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[1, 2, 3, 4]])
C = np.multiply.outer(A, B)

np.multiply.outer([1, 2, 3], [4, 5, 6]),C.shape, C

a1 = np.array([1, 2, 3, 4])
a2 = np.array([1, 2, 3, 4])

np.negative.at(a1, [0, 1])
np.add.at(a2, [0, 1, 2, 2], 1)

a = np.array([1, 2, 3, 4])
b = np.array([1, 2])
np.add.at(a, [0, 1], b)


a1,a2,a<jupyter_output><empty_output><jupyter_text>Available ufuncshttps://numpy.org/doc/stable/reference/ufuncs.htmlavailable-ufuncs<jupyter_code># 数学运算   三角函数<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.21135225375626043, 'fraction_numerical': 0.048080133555926545, 'mean_word_length': 4.517495395948434, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 10, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '212306', 'license': 'MIT', 'n_tokens_mistral': 1652, 'n_tokens_neox': 1621, 'n_words': 228, 'path': 'numpy/reference/11_ufuncs.ipynb', 'repo_name': 'kingreatwill/penter', 'size': '2995'}