panbaoran913 2021-12-10 11:52 采纳率: 71.4%
浏览 14

对array数组中的元素进行调用函数,由于数组巨大,所以,希望对数据进行并行式调用函数,而不是采用for循环的形式。

问题遇到的现象和发生背景

数组array或者list形式的数组,逐元素进行调用函数,由于数据量超大,运算过慢。期待病情算法

问题相关代码,请勿粘贴截图
a= np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]) # 模拟数组,而我实际的数组为a.shape=(1000,2)
Nodes=[1101,1105,1208,1306,1407,1876]  # lenth = 6 # a与Nodes是一一对应的
print(a.shape) # (6,2)
Policy= collections.defaultdict(lambda: [0, 0])
# 我的做法
for i in range(len(Nodes)):
    Policy[Nodes[i]]=a[i]
Policy
运行结果及报错内容
(6, 2)
defaultdict(<function __main__.<lambda>()>,
            {1101: array([1, 2]),
             1105: array([3, 4]),
             1208: array([5, 6]),
             1306: array([7, 8]),
             1407: array([ 9, 10]),
             1876: array([11, 12])})
我的解答思路和尝试过的方法

使用for循环的方式,逐一对元素进行操作。由于我实际的array数组太大,甚至还多次对数组元素调用函数的操作,导致运行变慢。

我想要达到的结果

希望能够实现并行操作。即对数组元素的一起调用函数。
想要实现这点的原因在与:
python中使用array数组而不是list列表就是为了遵循并行思想,提高运算效率的。
不知道这点的,请参考链接:https://blog.csdn.net/weixin_44322399/article/details/105700715

  • 写回答

1条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-12-10 18:10
    关注

    如果题主的函数不能适应NumPy数组的广播和矢量化的要求,只能使用自定义广播函数了。不过,自定义广播函数的效率和循环差不多。顺便说一下,题主的Policy函数感觉怪怪的,lambda看不懂。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月10日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表