了解numpy中的内存分配:将操作结果存储到变量[:,:]中时是否分配了“临时”内存?

时间:2018-11-12 19:19:17

标签: python python-3.x numpy memory-management

我们假设两个多维numpy数组someVector.push_back(std::move(object.second)); a。我想执行元素操作,例如逐个元素地添加它们:

b

在上述情况下,将为c = a + b 的结果分配新的内存。然后,对此存储器的引用存储在a + b中。

现在,让我们假设c的内存已被分配。为了有一个简单的示例,将尺寸数设置为2,我可以执行以下操作:

c

我找不到任何有关如何正确实现上述内容的文档。我可以想象两种方式:

  1. 首先,分配内存以执行操作c[:, :] = a + b 。在将数据(即运算结果)复制到a + b之前,将结果存储到此“临时”存储器中。
  2. 没有分配临时内存。 c[:, :]的结果直接进入a + b

我尝试了一些代码,并且-在这里我可能是绝对错误的-从性能角度来看,似乎第一种选择更有可能。我对吗?如果是这样,如何避免分配“临时内存”并将结果直接存储到c[:, :]中已经可用的内存中?我猜想我必须更加明确,使用c之类的函数并为其提供对目标内存的引用。

1 个答案:

答案 0 :(得分:3)

您要查找的操作是

import React, { Component } from 'react';
import { View, Animated, StyleSheet } from 'react-native';

export default class Deck extends Component {
  renderCards(){
    return this.props.data.map(item => {
        return this.props.renderCard(item);
    });
  }
  render() {
    return (
        <View>
            {this.renderCards()}
        </View>
    );
  }
}

对于numpy.add(a, b, out=c) ,对c[:, :] = a + b的评估没有关于将结果分配给a + b的事实的信息。它必须分配一个新数组来保存c[:, :]的结果。

(NumPy的最新版本确实尝试执行一些C-level stack inspection来主动优化临时变量,超出了Python执行模型通常所允许的范围,但是这些优化无法处理这种情况。您可以在{{ 3}},其中包括有关它在什么平台上运行以及为何Python堆栈检查不够的一些说明。)

相关问题