我有一个三维数组
[[[ 1 4 4 ..., 952 0 0]
[ 2 4 4 ..., 33 0 0]
[ 3 4 4 ..., 1945 0 0]
...,
[4079 1 1 ..., 0 0 0]
[4080 2 2 ..., 0 0 0]
[4081 1 1 ..., 0 0 0]]
[[ 1 4 4 ..., 952 0 0]
[ 2 4 4 ..., 33 0 0]
[ 3 4 4 ..., 1945 0 0]
...,
[4079 1 1 ..., 0 0 0]
[4080 2 2 ..., 0 0 0]
[4081 1 1 ..., 0 0 0]]
.....
[[ 1 4 4 ..., 952 0 0]
[ 2 4 4 ..., 33 0 0]
[ 3 4 4 ..., 1945 0 0]
...,
[4079 1 1 ..., 0 0 0]
[4080 2 2 ..., 0 0 0]
[4081 1 1 ..., 0 0 0]]]
此数组总共有5个数据块。每个数据块有4081行和9列。你知道吗
我这里的问题是关于访问数据块中的列。
我希望索引数据块、行和列,访问这些列,并使用if循环做一些工作。我知道如何访问二维数组中的列,例如:
column_1 = [row[0] for row in inputfile]
但是如何访问每个数据块的列呢?你知道吗
我试了一下(上面的inputfile=3d数组)
for i in range(len(inputfile)):
AAA[i] = [row[0] for row in inputfile]
print AAA[2]
但它说“名称”AAA“没有定义。如何访问每个数据块的列?我是否需要制作[无]数组?有没有其他不使用空数组的方法?你知道吗
另外,如何访问所访问列的特定元素?例如AAA[i][j]=i个数据块,以及第一列的第j行。我应该再使用一个for循环进行行访问吗?你知道吗
ps)我试着用这样的方式分析这个3d阵列
for i in range(len(inputfile)): ### number of datablock = 5
for j in range(len(inputfile[i])): ### number of lines per a datablock = 4081
AAA = inputfile[i][j] ### Store first column for each datablocks to AAA
print AAA[0] ### Working as I intended to access 1st column.
print AAA[0][1] ### Not working, invalid index to scalar variable. I can't access to the each elemnt.
但这样,我无法访问第1列AAA[0]的每个元素。如何访问这里的每个元素?你知道吗
我认为2个索引可能不够,所以我使用3个for循环作为:
for i in range(len(inputfile)): ### number of datablock = 5
for j in range(len(inputfile[i])): ### number of lines per a datablock = 4081
for k in range(len(inputfile[i][j])): ### number of columns per line = 9
AAA = inputfile[i][j][0]
print AAA[0]
尽管如此,我仍然无法访问第1列的每个元素,它表示“invalid index to scalar variable
”。另外,AAA包含每个元素中的9个元素,就像
>>> print AAA
1
1
1
1
1
1
1
1
1
2
2
...
4080
4080
4080
4081
4081
4081
4081
4081
4081
4081
4081
4081
像这样,每个元素重复9次,这不是我想要的。你知道吗
我希望在我的分析中使用索引,在分析中使用索引作为元素。我想访问这个3d数组中的列,以及每个元素的所有索引。我该怎么做?你知道吗
除非您使用的是NumPy之类的东西,否则Python本身就没有多维数组。相反,您显示的结构是一个整数列表的列表。(您选择
inputfile
作为变量名在这里很混乱;这样的变量通常会包含一个文件句柄,对其进行迭代会每行产生一个字符串,但我离题了……)不幸的是,我很难准确地理解您要完成的任务,但是有一次,您似乎想要一个由每行的第一列组成的列表。这很简单:
诚然,这不是一个真正的数学意义上的专栏,但它可能是你想要的。你知道吗
现在,关于你其他尝试失败的原因:
如错误消息所述,
AAA
未定义。Python不允许为未定义变量的索引赋值,因为它不知道该变量应该是list、dict还是其他更奇特的变量。特别是对于列表,它也不允许您分配给尚不存在的索引;相反,append
或extend
方法用于:(然而,这并不像上面的列表那样有效。)
第二行的范围有一个明显的问题,多次查找inputfile[i]时效率低下,但真正的问题在最后一行。此时,AAA指的是其中一个块的一行;例如,在第一次通过时,给定上面的数据集
它是一个单一的列表,没有引用整个数据结构。
AAA[0]
用于访问第一列1
中的数字,因为列表就是这样操作的。该行的第二列将位于AAA[1]
,依此类推。但是AAA[0][1]
抛出了一个错误,因为它等价于(AAA[0])[1]
,在本例中,它等于(1)[1]
,但是数字不能被索引。(数字1的第二个元素是什么?)你知道吗这一次,
for
循环虽然效率仍然很低,但如果您想迭代整个数据结构中的每个数字,至少是正确的。在底部,您会发现inputfile[i][j][k]
是数据结构块i
中第j
行的整数k
。但是,您要完全抛出k
,并为行中的每个项目打印行的第一个元素。(事实上,它的重复次数与列的重复次数完全相同,这应该是一个线索。)而且,一旦得到整数,就不能再编制索引了;这里没有inputfile[i][j][0][0]
。你知道吗当然,一旦到达一个元素,就可以通过更改索引来查看附近的元素。例如,一个三维元胞自动机可能想要查看它的每个邻居。如果对数据的边缘进行了适当的更正,并检查以确保每个块和行的长度都正确(Python不会这样做),则可能会出现如下情况:
利用拉链的良好实践:
例如:
相关问题 更多 >
编程相关推荐