Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
制作一个3D数组,其中每个项目引用Python中的当前行、列和项目_Python_Arrays_Numpy_Multidimensional Array - Fatal编程技术网

制作一个3D数组,其中每个项目引用Python中的当前行、列和项目

制作一个3D数组,其中每个项目引用Python中的当前行、列和项目,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我试图制作一个3D数组,其中每个元素都引用当前的行、列和项。因此,如果我有x=[0,1],y=[0,1,2]和项=['a','b'],我希望输出是 arr = [ [ [00a, 10a], [01a, 11a], [02a, 12a] ], [ [00b, 10b], [01b, 11b], [02b, 12b] ]] 我知道这可以很容易地用三重循环来完成 for i in range(len(x)): for j in range(len(y)): for it in ran

我试图制作一个3D数组,其中每个元素都引用当前的行、列和项。因此,如果我有
x=[0,1]
y=[0,1,2]
项=['a','b']
,我希望输出是

arr = [ [ [00a, 10a], [01a, 11a], [02a, 12a] ], 
[ [00b, 10b], [01b, 11b], [02b, 12b] ]]
我知道这可以很容易地用三重循环来完成

for i in range(len(x)):
  for j in range(len(y)):
    for it in range(len(item)):
      arr[i,j,it] = str(i)+str(j)+it

但是有没有更优雅的方法来实现这一点,例如使用一些numpy命令?谢谢

您可以使用列表理解:

arr=[[[f'{i}{j}{k}' for k in item]for j in y]for i in x]
输出:

arr
[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],
 [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]
array([[['00a', '00b'],
        ['01a', '01b'],
        ['02a', '02b']],

       [['10a', '10b'],
        ['11a', '11b'],
        ['12a', '12b']]], dtype='<U3')

使用
itertools
numpy
的其他选项:

import itertools 
import numpy as np
prod=itertools.product(x,y,item)
prod=list(map(lambda x: f'{x[0]}{x[1]}{x[2]}',prod))
np.array(prod).reshape(len(x),len(y),len(item))
输出:

arr
[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],
 [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]
array([[['00a', '00b'],
        ['01a', '01b'],
        ['02a', '02b']],

       [['10a', '10b'],
        ['11a', '11b'],
        ['12a', '12b']]], dtype='<U3')
数组(['00a',00b'],
[01a',01b'],
[02a',02b']],
[10a',10b'],
[11a',11b'],

['12a','12b']]],dtype='您可以使用列表理解:

arr=[[[f'{i}{j}{k}' for k in item]for j in y]for i in x]
输出:

arr
[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],
 [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]
array([[['00a', '00b'],
        ['01a', '01b'],
        ['02a', '02b']],

       [['10a', '10b'],
        ['11a', '11b'],
        ['12a', '12b']]], dtype='<U3')

使用
itertools
numpy
的其他选项:

import itertools 
import numpy as np
prod=itertools.product(x,y,item)
prod=list(map(lambda x: f'{x[0]}{x[1]}{x[2]}',prod))
np.array(prod).reshape(len(x),len(y),len(item))
输出:

arr
[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],
 [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]
array([[['00a', '00b'],
        ['01a', '01b'],
        ['02a', '02b']],

       [['10a', '10b'],
        ['11a', '11b'],
        ['12a', '12b']]], dtype='<U3')
数组(['00a',00b'],
[01a',01b'],
[02a',02b']],
[10a',10b'],
[11a',11b'],

['12a','12b']]],dtype='下面是另一个使用numpy的不带循环的解决方案:

import numpy as np

x=np.array([0,1]).astype(str)
y=np.array([0,1,2]).astype(str)
items=np.array(['a','b'])


temp= np.core.defchararray.add(y[:,np.newaxis], items)
result = np.core.defchararray.add(x[:,np.newaxis,np.newaxis], temp)

print(result)
输出:

[[['00a' '00b']
  ['01a' '01b']
  ['02a' '02b']]

 [['10a' '10b']
  ['11a' '11b']
  ['12a' '12b']]]

下面是另一个使用numpy的不带循环的解决方案:

import numpy as np

x=np.array([0,1]).astype(str)
y=np.array([0,1,2]).astype(str)
items=np.array(['a','b'])


temp= np.core.defchararray.add(y[:,np.newaxis], items)
result = np.core.defchararray.add(x[:,np.newaxis,np.newaxis], temp)

print(result)
输出:

[[['00a' '00b']
  ['01a' '01b']
  ['02a' '02b']]

 [['10a' '10b']
  ['11a' '11b']
  ['12a' '12b']]]

我不知道numpy是否有这样一个命令,但是如果你想获得更好的性能,你也可以使用列表理解。你想改进什么?@wwii我想知道是否有更简单的方法来实现这一点,最好是使用更少的行数。@NOBODY33先生已经使用列表理解相关:,-给了你答案搜索替换嵌套for循环的解决方案为什么没有一个搜索结果是可接受的。?我不知道numpy是否有这样的命令,但如果您想要更好的性能,您也可以使用列表理解。您想改进什么?@wwii我想知道是否有更简单的方法来完成此操作,最好是可以做的事情行数较少的ne。@MrNobody33使用列表理解相关:,-给了您答案。-当您搜索替换嵌套for循环的解决方案时,为什么没有一个搜索结果是可接受的。?根据我的经验
defchararray
函数速度不快。它们仍然使用python字符串方法,每次一个元素。在我的经验中e
defchararray
函数速度不快。它们仍然使用python字符串方法,一次一个元素。