【问题标题】:Storing Dynamically in an array python动态存储在数组python中
【发布时间】:2017-06-27 20:57:28
【问题描述】:

我实际上是在将一个 matlab 脚本翻译成 python,我在 python 中使用数组时遇到了问题(我仍然是初学者)numpy。 我的问题是这样的: 在 matlab 中,我正在计算几个信号的傅立叶变换,并将其动态存储在 3 x 3 数组中,例如 U。我想要做的一个简单示例如下;

l = 3 ;
c = 0 ;
for i = 1:3
    for j = 1:10
        c=c+1 ;
        a = j + 1;
        U(i,c,:)=a ;
    end 
end

我想将它翻译成 python,但我无法创建在 U 中动态存储“a”值的数组 U。 注意:为了简单起见,这里将“a”计算为 j+1,但在我的脚本中,“a”是一个数组(信号的傅立叶变换)

对不起,我的英语不好,我是法国人。 T

【问题讨论】:

  • 你试过的python代码是什么?你得到什么错误?分配在numpy 中的工作方式非常相似。
  • MATLAB 会在您分配给它时增长一个矩阵。 numpy 要求您首先初始化正确大小的数组。查看这个最近的问题,也称为dynamicallystackoverflow.com/questions/42041016/…
  • 您似乎事先知道数组的大小。因此,您可以先将数组预分配为:mat = np.empty(shape=(3, 30))。检查我的形状是否正确。
  • @hpaulj 从技术上讲,MATLAB 不会增加数组,它会创建一个新数组并复制所有数据。它非常慢,在这种情况下您不应该这样做。如果你真的想的话,你可以在 numpy 中做同样的事情。不同之处在于 numpy 让您明确地进行复制,因此人们不会被愚弄认为数组是动态大小的。

标签: arrays matlab python-2.7 numpy


【解决方案1】:

我相信你最终会想要这样的东西。令人困惑的一件事是您的循环变量 c 和 j 正在做什么。看起来你想要 c=j,所以我在下面更改了它。您需要注意的一件事是 python 对象从 0 开始索引,而 Matlab 对象从 1 开始索引。所以下面,如果您真正开始检查 i 和 j 的值,您会看到它们从 0 开始。

import numpy
L = 3;
C = 10;
N = 50; # Size of the Fourier array
U = numpy.zeros((L,C,N))
for i in range(L):
    for j in range(C):
        # Create a matrix of scalars, for testing
        a           = i*j*numpy.ones((N,));
        U[i,j,:]    = a;

【讨论】:

  • 非常感谢!这正是我想要的
  • 我对 U 的尺寸有疑问,通常它的尺寸是 3,但是当我这样做时 np.shape(U[1,2,:]) U 的尺寸似乎是 2
  • 是的,因为在这种情况下,您正在撤离潜艇。如果是,请将答案标记为正确。
  • 我还是不明白为什么维度不是3
  • 因为您要提取一个与“a”大小相同的矩阵,而“a”只有 2 个维度。您可以认为第 3 维隐含地等于 1。
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多