2010-02-23 73 views
3

对,也许我应该使用普通的Python列出了这一点,但这里有云:简单的问题:在numpy中,如何制作一个多维数组数组?

我希望有一个9×4多维数组/矩阵(不管真的),我想存储阵列,这些阵列会。 1维的长度和4096

所以,我希望能够去像

column = 0         #column to insert into 
row = 7          #row to insert into 
storageMatrix[column,row][0] = NEW_VALUE 
storageMatrix[column,row][4092] = NEW_VALUE_2 
etc.. 

我明白我可以在这里做的东西有点傻/不必要的,但它会使它了很多在我的代码中更容易让它像这样构造(因为这些很多,而且需要做很多分析更高版本)。

谢谢!

回答

8

注意利用numpy的的全功率,用三维numpy数组你会更好。将三维数组拆分为一个1-d值的二维数组 可能会使代码复杂化并迫使您使用循环而不是内置的numpy函数。

您可能需要投入时间重构代码以使用高级3-D numpy阵列。

但是,如果这不是一个选项,然后:

import numpy as np 
storageMatrix=np.empty((4,9),dtype='object') 

通过设置dtype'object',我们告诉numpy的允许的storageMatrix每个元素可以是任意的Python对象。

现在你必须初始化numpy的数组的每个元素是一个1-d numpy的数组:

storageMatrix[column,row]=np.arange(4096) 

然后可以访问这样的数组元素:

storageMatrix[column,row][0] = 1 
storageMatrix[column,row][4092] = 2 
+0

真棒,这很完美 - 事实上我会重构我的代码使用3D数组,这是有道理的。 – 2010-02-23 15:04:21

0

Tentative NumPy Tutorial说,你可以使用逗号运算符声明一个二维数组:

x = ones((3,4)) 

和索引到一个二维数组是这样的:

>>> x[1,2] = 20 
>>> x[1,:]        # x's second row 
array([ 1, 1, 20, 1]) 
>>> x[0] = a       # change first row of x 
>>> x 
array([[10, 20, -7, -3], 
     [ 1, 1, 20, 1], 
     [ 1, 1, 1, 1]]) 
+0

确定你”第一部分有正确的想法:我可能没有正确解释自己。所以设置这些((3,4))是正确的...现在想象为数组中的每个1我想有一个数组(为了参数,[1,2,3])...我会怎么做? – 2010-02-23 14:20:26

+0

我想我可以制作一个三维数组,但这很令人困惑。 – 2010-02-23 14:23:11

+0

现在不需要cos了,我需要一个4-d一个,那是一个耻辱cos第4个维度影响其他3个,我只希望它影响第3个维度:( – 2010-02-23 14:51:36