说我有array1,它等于
array1=np.zeros((3,3))
that means [[0 0 0]
[0 0 0]
[0 0 0]]
但如果我尝试以下操作就会输出错误:
array2=np.array[[111,222,333],[444,555,666],[77
array1[1,1]=array2
那么我如何替换每个array1元素用于不同的新数组? 例如
for i in range(3):
for j in range (3):
if i-j==0:
array1[i,j]=array2
所以它会变成3 * 9而不是3 * 3?
edit1 :上述示例的预期输出
[[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]]]
答案 0 :(得分:1)
如果你可以使用列表而不是numpy数组,你可以这样做:
array1 = [[0,0],[0,0]]
array2 = [[1,2],[3,4]]
for i in range(len(array1)):
for j in range(len(array1[0])):
array1[i][j] = array2
print array1
如果必须使用numpy数组,可以将它们转换为列表,然后在执行上述操作后将它们转换回numpy数组。
答案 1 :(得分:1)
您无法更改numpy数组的大小(元素数)。但您可以使用列表作为创建最终数组的中间步骤:
>>> import numpy as np
>>> array1 = np.zeros((3,3))
>>> array2 = [251,123,584]
>>> np.array([[array2 for _ in row] for row in array1.tolist()])
array([[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]]])
采取一些中间步骤:
# Convert the original array to a list
>>> array1.tolist()
[[1.0, 2.0, 3.0], [1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]
# Iterate over all elements and replace the element by array2:
>>> [[array2 for _ in row] for row in array1.tolist()]
[[[251, 123, 584], [251, 123, 584], [251, 123, 584]],
[[251, 123, 584], [251, 123, 584], [251, 123, 584]],
[[251, 123, 584], [251, 123, 584], [251, 123, 584]]]
# Convert the list to a numpy array again
>>> np.array([[array2 for _ in row] for row in array1.tolist()])
...
答案 2 :(得分:1)
如果从足够大的数组开始,则可以插入较小的数组。广播将采取复制以匹配目标数组。
您的预期结果是3d,而不是(9,9):
In [118]: a=np.zeros((3,3,3),int)
In [119]: a2=np.array([251,123,584])
In [120]: a[...]=a2 # short hand for a[:,:,:]
In [121]: a
Out[121]:
array([[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],
[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]]])
此处a[...]=a2
是a[:,:,:]=a2[None,None,:]
使用a2[None,:,None]
或a2[:,None,None]
会复制不同维度的a2
值。
np.tile(a2,[3,3,1])
也有效。 np.resize(a2,(3,3,3))
也是如此。将这些概括起来可能比较棘手。
如果使尺寸不同,测试可以更清晰:
In [139]: a2=np.array([1,2,3,4])
In [140]: a[...]=a2
In [141]: a
Out[141]:
array([[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]],
[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]]])
此处只有4个元素a2
符合最后一个维度。