python - 如何将交替三角函数添加到 Python 中的数组?
问题描述
所以我想将交替的 Cos 和 Tan 函数添加到 python 中具有给定大小的数组中。例如,我有一个大小为 (10,5) 的 numpy 数组,我想为每一行添加 (Tan(a)、Cos(a)、Tan(a)、Cos(a)、Tan(a))。有人可以提供从哪里开始的提示吗?
我尝试在计数器小于 5 的情况下设置一个使用 while 循环的计数器,但这似乎不起作用。非常感谢您的建议。
解决方案
解决方案
既然你要求交替,我想用三种交替给出一个更通用的答案:
- 交替
row
- 交替
column
你要求这个 - 交替
row
和column
(两者):像棋盘
我将在后续示例中使用此虚拟数据:A,B,C
# dummy data
import numpy as np
angles = np.random.rand(5,4) * np.pi
A. 预期输出:交替行
[[tan, tan, tan, tan],
[cos, cos, cos, cos],
[tan, tan, tan, tan],
[cos, cos, cos, cos],
[tan, tan, tan, tan]]
代码:
# import numpy as np
a = np.zeros(angles.shape)
a[0::2, :] = np.tan(angles[0::2, :])
a[1::2, :] = np.cos(angles[1::2, :])
B. 预期输出:交替列
[[tan, cos, tan, cos],
[tan, cos, tan, cos],
[tan, cos, tan, cos],
[tan, cos, tan, cos],
[tan, cos, tan, cos]]
代码:
# import numpy as np
a = np.zeros(angles.shape)
a[:, 0::2] = np.tan(angles[:, 0::2])
a[:, 1::2] = np.cos(angles[:, 1::2])
C. 预期输出:行列交替
[[tan, cos, tan, cos],
[cos, tan, cos, tan],
[tan, cos, tan, cos],
[cos, tan, cos, tan],
[tan, cos, tan, cos]]
代码:
# import numpy as np
a = np.zeros(angles.shape)
a[0::2, 0::2] = np.tan(angles([0::2, 0::2])) # tan: odd-row, odd-column
a[0::2, 1::2] = np.cos(angles([0::2, 1::2])) # cos: odd-row, even-column
a[1::2, 0::2] = np.cos(angles([1::2, 0::2])) # cos: even-row, odd-column
a[1::2, 1::2] = np.tan(angles([1::2, 1::2])) # tan: even-row, even-column
D.numpy
对交替行使用矢量化的好处
您可以使用以下自定义函数:custom_trig_func()
. numpy
如果可以跳过for
循环,则将函数应用于numpy 数组会更快。您的代码矢量化程度越高,运行速度就越快。这里的方法避免使用循环并使用和for
的内置向量化。numpy.tan
numpy.cos
custom_trig_func(angles)
但是,如果您只想用最少的代码行来生成自定义函数的功能,请使用以下命令:
# angles is your input ndarray
even_rows = (np.arange(angles.shape[0]) % 2 == 0)
out = np.tan(angles)
out[even_rows, :] = np.cos(angles[even_rows, :])
print(out.shape) # out is your expected output
代码
import numpy as np
def custom_trig_func(angles: np.ndarray, validate=False) -> np.ndarray:
"""Returns an array of type -> numpy.ndarray and shape -> angles.shape, with
- odd rows operated on by numpy.tan() and,
- even rows operated on by numpy.cos().
"""
# determine odd and even row indices
rows = np.arange(angles.shape[0])
even_rows = (rows % 2 == 0)
odd_rows = ~even_rows
# create output array
out = np.tan(angles)
out[even_rows, :] = np.cos(angles[even_rows, :])
if validate:
assert np.all(out[odd_rows, :] == np.tan(angles[odd_rows, :])), "Validation error in applying TAN to odd rows"
assert np.all(out[even_rows, :] == np.cos(angles[even_rows, :])), "Validation error in applying COS to even rows"
return out
# dummy data
angles = np.random.rand(10,5) * np.pi
# apply custom function
custom_trig_func(angles=angles, validate=True)
推荐阅读
- solr - 如何忽略来自 solr 的刻面中的标记
- reactjs - 在 React 组件中动态导入图像
- javascript - javascript 在本地服务器上工作,但在实时服务器 2 上不工作
- java - hashMap 的 put 方法覆盖已存储数据的值
- arrays - Laravel 从集合或数组中获取所有值
- android - 颤动我应该在Android上的哪里放置firestore时间戳设置
- javascript - 反应导航添加选项卡标题
- android - 安装了基本身份验证和 SSL 的 Woocommerce REST API 没有响应
- java - 使用 vlcj (Java) 验证字幕文件
- python - 按熊猫数据框和条件分组