Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建具有给定名称的n个数组?_Python_Loops_Numpy_Matrix - Fatal编程技术网

Python 如何创建具有给定名称的n个数组?

Python 如何创建具有给定名称的n个数组?,python,loops,numpy,matrix,Python,Loops,Numpy,Matrix,我有一些三维数组,我想从每个数组中获取相同位置的值,然后将其复制到一个带有位置名称的数组中 例如,我有三个2x2x2数组,我想取每个矩阵的位置(1,1,1)处的值,并将其复制到一个名为111array的数组中。这个数组应该包含三个值 矩阵中的所有值和所有位置也应如此 我有一个for循环,它迭代一个数组中的所有值。但我不知道如何将结果以正确的方式保存到数组中,即数组名称显示位置号 我的第一个数组叫做b 范围内i的(b.shape[0]): 对于范围内的j(b.形状[1]): 对于范围内的k(b.形

我有一些三维数组,我想从每个数组中获取相同位置的值,然后将其复制到一个带有位置名称的数组中

例如,我有三个2x2x2数组,我想取每个矩阵的位置(1,1,1)处的值,并将其复制到一个名为111array的数组中。这个数组应该包含三个值 矩阵中的所有值和所有位置也应如此

我有一个for循环,它迭代一个数组中的所有值。但我不知道如何将结果以正确的方式保存到数组中,即数组名称显示位置号

我的第一个数组叫做b

范围内i的
(b.shape[0]):
对于范围内的j(b.形状[1]):
对于范围内的k(b.形状[2]):
打印(b[i,j,k])

寻求帮助

看看这是不是你想要的。这是基于你的例子

import numpy as np
from itertools import product


a = np.arange(8).reshape(2,2,2)
b = a + 1
c = a + 2

indices = product(range(2), repeat=3)
all_arrays = []
for i in indices:
    suffix = ''.join(map(str,i))
    array_name = 'array'+suffix

    value = np.array([a[i],b[i],c[i]])
    exec(array_name+'= value')
    exec(f'all_arrays.append({array_name})')

for name in all_arrays:
    print(name)
print('\n')
print(all_arrays)
print('\n')
print(array111)
print('\n')
print(array101)
输出:

[0 1 2]
[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]
[5 6 7]
[6 7 8]
[7 8 9]

[array([0, 1, 2]), array([1, 2, 3]), array([2, 3, 4]), array([3, 4, 5]), array([4, 5, 6]), array([5, 6, 7]), array([6, 7, 8]), array([7, 8, 9])]

[7 8 9]

[5 6 7]

看看这是不是你想要的。这是基于你的例子

import numpy as np
from itertools import product


a = np.arange(8).reshape(2,2,2)
b = a + 1
c = a + 2

indices = product(range(2), repeat=3)
all_arrays = []
for i in indices:
    suffix = ''.join(map(str,i))
    array_name = 'array'+suffix

    value = np.array([a[i],b[i],c[i]])
    exec(array_name+'= value')
    exec(f'all_arrays.append({array_name})')

for name in all_arrays:
    print(name)
print('\n')
print(all_arrays)
print('\n')
print(array111)
print('\n')
print(array101)
输出:

[0 1 2]
[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]
[5 6 7]
[6 7 8]
[7 8 9]

[array([0, 1, 2]), array([1, 2, 3]), array([2, 3, 4]), array([3, 4, 5]), array([4, 5, 6]), array([5, 6, 7]), array([6, 7, 8]), array([7, 8, 9])]

[7 8 9]

[5 6 7]

看起来有人抢先给了我答案,但这里有另一种方法。我使用了一个字典来关联所有数组并从函数返回它

import numpy as np

b = np.array([0, 1, 2, 3, 4, 5, 6, 7])
b = np.reshape(b, (2, 2, 2))
print(b, type(b))
# [[[0 1],
#   [2 3]],
#  [[4 5],
#   [6 7]]] <class 'numpy.ndarray'>

def myfunc(arr):
    for i in range(b.shape[0]):
        for j in range(b.shape[1]):
            for k in range(b.shape[2]):
                # Create a new array name from string parts.
                name = "arr"+str(i)+str(j)+str(k)
                print(name, b[i, j, k])  
                # Example: 'arr000', 0.
                # Add a new key-value pair to the dictionary.
                mydict.update({name: b[i,j,k]}) 
    return(mydict)

mydict = {}
result = myfunc(b)
print(result)
# {'arr000': 0, 'arr001': 1, 'arr010': 2, 'arr011': 3, 'arr100': 4, 
#  'arr101': 5, 'arr110': 6, 'arr111': 7}

# You would need to unpack the dictionary to use the arrays separately.
# use "mydict.keys()" to get all array names.
# "for key in keys" to loop through all array names. 
# mydict['arr000'] will return the value 0.
将numpy导入为np
b=np.数组([0,1,2,3,4,5,6,7])
b=np.重塑(b,(2,2,2))
打印(b,类型(b))
# [[[0 1],
#   [2 3]],
#  [[4 5],
#   [6 7]]] 
def myfunc(arr):
对于范围内的i(b.形状[0]):
对于范围内的j(b.形状[1]):
对于范围内的k(b.形状[2]):
#从字符串部分创建新的数组名称。
name=“arr”+str(i)+str(j)+str(k)
打印(名称,b[i,j,k])
#示例:“arr000”,0。
#将新的键值对添加到字典中。
更新({name:b[i,j,k]})
返回(mydict)
mydict={}
结果=myfunc(b)
打印(结果)
#{'arr000':0,'arr001':1,'arr010':2,'arr011':3,'arr100':4,
#'arr101':5,'arr110':6,'arr111':7}
#您需要解包字典以单独使用数组。
#使用“mydict.keys()”获取所有数组名称。
#“for key in key”循环遍历所有数组名称。
#mydict['arr000']将返回值0。
您的问题标记为“numpy”,但不在代码段中使用它。如果您试图坚持使用numpy,还有另一种方法称为“结构化数据数组”。它类似于字典,因为“名称”和“值”可以作为成对集存储在numpy数组中。这保持了numpy高效的内存管理和快速计算(C优化)。如果您使用的是大型数据集,这一点很重要

另外,如果使用numpy,可能有一种方法可以在变量名中使用索引值


稍后,我会想出这两种方法的例子,并在可能的情况下更新我的答案。

看起来有人比我抢先找到了答案,但这里有另一种方法。我使用了一个字典来关联所有数组并从函数返回它

import numpy as np

b = np.array([0, 1, 2, 3, 4, 5, 6, 7])
b = np.reshape(b, (2, 2, 2))
print(b, type(b))
# [[[0 1],
#   [2 3]],
#  [[4 5],
#   [6 7]]] <class 'numpy.ndarray'>

def myfunc(arr):
    for i in range(b.shape[0]):
        for j in range(b.shape[1]):
            for k in range(b.shape[2]):
                # Create a new array name from string parts.
                name = "arr"+str(i)+str(j)+str(k)
                print(name, b[i, j, k])  
                # Example: 'arr000', 0.
                # Add a new key-value pair to the dictionary.
                mydict.update({name: b[i,j,k]}) 
    return(mydict)

mydict = {}
result = myfunc(b)
print(result)
# {'arr000': 0, 'arr001': 1, 'arr010': 2, 'arr011': 3, 'arr100': 4, 
#  'arr101': 5, 'arr110': 6, 'arr111': 7}

# You would need to unpack the dictionary to use the arrays separately.
# use "mydict.keys()" to get all array names.
# "for key in keys" to loop through all array names. 
# mydict['arr000'] will return the value 0.
将numpy导入为np
b=np.数组([0,1,2,3,4,5,6,7])
b=np.重塑(b,(2,2,2))
打印(b,类型(b))
# [[[0 1],
#   [2 3]],
#  [[4 5],
#   [6 7]]] 
def myfunc(arr):
对于范围内的i(b.形状[0]):
对于范围内的j(b.形状[1]):
对于范围内的k(b.形状[2]):
#从字符串部分创建新的数组名称。
name=“arr”+str(i)+str(j)+str(k)
打印(名称,b[i,j,k])
#示例:“arr000”,0。
#将新的键值对添加到字典中。
更新({name:b[i,j,k]})
返回(mydict)
mydict={}
结果=myfunc(b)
打印(结果)
#{'arr000':0,'arr001':1,'arr010':2,'arr011':3,'arr100':4,
#'arr101':5,'arr110':6,'arr111':7}
#您需要解包字典以单独使用数组。
#使用“mydict.keys()”获取所有数组名称。
#“for key in key”循环遍历所有数组名称。
#mydict['arr000']将返回值0。
您的问题标记为“numpy”,但不在代码段中使用它。如果您试图坚持使用numpy,还有另一种方法称为“结构化数据数组”。它类似于字典,因为“名称”和“值”可以作为成对集存储在numpy数组中。这保持了numpy高效的内存管理和快速计算(C优化)。如果您使用的是大型数据集,这一点很重要

另外,如果使用numpy,可能有一种方法可以在变量名中使用索引值


稍后,我将考虑这两个方面的例子,并在可能的情况下更新我的答案。

正如其他人所指出的,这似乎是一个奇怪的请求。但为了好玩,这里有一个简短的解决方案:

In [1]: import numpy as np
   ...: A = np.arange(8).reshape((2,2,2))
   ...: B = 10*A
   ...: C = 100*A

In [2]: A
Out[2]:
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

In [3]: D = np.concatenate((A[None], B[None], C[None]))
   ...: for (a,b,c) in np.ndindex((2,2,2)):
   ...:     locals()[f'array{a}{b}{c}'] = D[:,a,b,c]
   ...:

In [4]: array000
Out[4]: array([0, 0, 0])

In [5]: array001
Out[5]: array([  1,  10, 100])

In [6]: array010
Out[6]: array([  2,  20, 200])

In [7]: array011
Out[7]: array([  3,  30, 300])

In [8]: array100
Out[8]: array([  4,  40, 400])

In [9]: array101
Out[9]: array([  5,  50, 500])

In [10]: array110
Out[10]: array([  6,  60, 600])

In [11]: array111
Out[11]: array([  7,  70, 700])

正如其他人所指出的,这似乎是一个奇怪的要求。但为了好玩,这里有一个简短的解决方案:

In [1]: import numpy as np
   ...: A = np.arange(8).reshape((2,2,2))
   ...: B = 10*A
   ...: C = 100*A

In [2]: A
Out[2]:
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

In [3]: D = np.concatenate((A[None], B[None], C[None]))
   ...: for (a,b,c) in np.ndindex((2,2,2)):
   ...:     locals()[f'array{a}{b}{c}'] = D[:,a,b,c]
   ...:

In [4]: array000
Out[4]: array([0, 0, 0])

In [5]: array001
Out[5]: array([  1,  10, 100])

In [6]: array010
Out[6]: array([  2,  20, 200])

In [7]: array011
Out[7]: array([  3,  30, 300])

In [8]: array100
Out[8]: array([  4,  40, 400])

In [9]: array101
Out[9]: array([  5,  50, 500])

In [10]: array110
Out[10]: array([  6,  60, 600])

In [11]: array111
Out[11]: array([  7,  70, 700])

这真的不是个好主意。只需通过切片
a[:,1,1,1]
创建一个新数组,这个
111array
命名约定在python中是无效的。有人能给我一个代码示例来说明如何做吗?这真的不是一个好主意。只需通过切片
a[:,1,1,1]
创建一个新数组,这个
111array
命名约定在python中是无效的。有人能给我一个如何做的代码示例吗?