Python 将ndarray的整个列维度替换为另一个长度相同的数组

Python 将ndarray的整个列维度替换为另一个长度相同的数组,python,arrays,numpy,Python,Arrays,Numpy,我有python中的5d ndarray,定义如下 RGBXY = [ [1,2,3,4,5], [6,7,8,9,10], #...100 more times [101,102,103,104,105], ] 我还有一个数组定义为 x = [0,0.3,0.4,0.6,0.8,0.9...] #length same as RGBXY subarrays 我想用x中的值替换第4列 所以,如果我想用一个数字来代替它们,我会这么做 RGBXY[:,3:4]

我有python中的5d ndarray,定义如下

RGBXY = [
    [1,2,3,4,5],
    [6,7,8,9,10],
     #...100 more times
    [101,102,103,104,105],
]
我还有一个数组定义为

x = [0,0.3,0.4,0.6,0.8,0.9...] #length same as RGBXY subarrays
我想用x中的值替换第4列 所以,如果我想用一个数字来代替它们,我会这么做

RGBXY[:,3:4] = 5

如何用x中的数组替换第4列?

使用np有一种很好的方法,我不知道。前提是阵列的长度相同

RGBXY[:,3] = x
你可以用它来做

for i in range(len(RGBXY)): # For 0 - length of RGBXY array(number of elements in RGBXY)
    RGBXY[i][3] = x[i] # Assign the 4th(for loops counts from 0) column in the array to x at the same index. 
如果这些是numpy数组(或者您可以使用numpy),那么您应该能够按照如下方式直接分配它,假设RGBXY中的所有列表长度相同:

RGBXY=np.array([
[1,2,3,4,5],
[6,7,8,9,10],
[101,102,103,104,105],
],dtype=float)
x=[0,0.3,0.4]
RGBXY[:,3]=x
然后,RGBXY的值为:

array([[  1. ,   2. ,   3. ,   0. ,   5. ],
       [  6. ,   7. ,   8. ,   0.3,  10. ],
       [101. , 102. , 103. ,   0.4, 105. ]])

注意,我必须将数组的数据类型指定为上面的float,因为所有原始值都是整数,但新的x值都是float。如果没有这一点,它将把所有的x值转换为int(在本例中为零)。

Im get:indexer错误:索引100超出了大小为100的轴0的范围。您说的是相同长度的数组在哪里?是吗?是的,他们应该是。但这个错误表明它们的长度不同,对吗?我想是的。这应该迭代RGBXY中的每个元素,并将RGBXY[i]中的第四个元素设置为x[i]或xFriendly中的第n个元素注意:此过程不需要迭代,严格来说,由于其效率低下,“不鼓励”(如果愿意的话)。广播是一种方式。你的意思是:
RGBXY[:,3]=x
?这将用定义为
x
的数组替换第四列(索引3)。这是一个有5列的2D数组,而不是5D数组