首页 > 解决方案 > 需要帮助在 Python (v Java) 中声明和分配具有不同元素数量的多维数组

问题描述

我是一个长期潜入 python 的 java 用户。
我正在寻找一种创建多维数组的方法,该数组可能具有不同数量的元素,部分或全部在运行时才知道。

在 java 中,我会分配一个名为 runSet 的 3 维数组,如下所示:

double[][][] runSet = new double[5][][];

int randomInt = genRandInt();  // Returns a random integer between 0 and 101.

for(int i = 0; i < 4; i++) runSet[i] = getRuns(randomInt);  // Returns double[randomInt][ToBeDetermined]

// ------------------------------------------------------------------------------

public double[][] getRuns(int num)
{  
  double[][] array2D = new double[num][];
  for(int i = 0; i< num; i++) array2D[i] = genRandArray(); // returns double[] of random values with length between 0 and 1001.
  
  return array2D; // Returns double[num][Varying Length]
} // end GetRuns()

没问题,这工作得很好。但是使用 python 我想做同样的事情,我无法弄清楚如何正确分配具有未知数量元素的数组。我能想到的最好的是:

import numpy as np
    
runSet = np.empty([5, ]) # <--- Does NOT throw an error.
randomInt = genRandInt()   # Returns a random integer between 0 and whatever.

i = 0
while i < 4:
   runSet[i] = getRuns(randomInt)  # Returns [][] (double[randomInt][ToBeDetermined] in java speak)
   i += 1

#-------------------------------------------------
    
def getRuns(num) 
    array2D = np.empty([num, ]) # <-- Does NOT throw an error.
    i = 0
    while i < num:
         array2D[i] = genRandArray(); # Returns double[] of random values with a random LENGTH as well.
         i += 1
          
    return array2D; // Returns double[num][Varying Length]
    
# end GetRuns()

在 genRandArray(),python 版本中,我返回这个(示例随机)语句:

return [12.4, 6.4, 8.0, 7.9, 8.2, 6.3, 8.8, 3.14, 2.345, 66.828, 12.0]

在这两个地方我都分配了 runSet[i] 和 array2D[i],我现在知道我会得到类似于“将顺序列表添加到单个 ....”的错误。

问题1):也许数组形式更适合返回?

问题2):我什至接近吗?
我有一种感觉,我可能会以完全错误的方式来解决这个问题,因为在 python 中的数组思考似乎完全不同于我在 java 中接受过的思考它的方式。谢谢你的帮助!

标签: javapythonarraysnumpydynamic-arrays

解决方案


推荐阅读