使用一个单列替换原数组中对应列失败

问题遇到的现象和发生背景

首先将一个二维数组其中一列有异常大值的列取出来,经过处理后该列异常值已经替换,现在想把处理后的单列替换原数组中对应的列,没有成功,不知为什么?

遇到的现象和发生背景,请写出第一个错误信息

原来有异常值的列没有被替换

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

log_num2 = np.array(log_num2) #其实log_num2已经是一个array, log_num2已经处理过,检查确认
log[::,num2] = log_num2 # 使用log_num2替换原数组中num2列,num2也检查数值正确。

运行结果及详细报错内容

运行后原数组中对应的列没有被替换

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

使用处理后的列替换原来的列

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

目标是将处理后的列(一个单列array文件)替换原二维数组中对应的列。

望采纳!!!
我看见你使用了 NumPy 的切片功能来对 log 数组的第 num2 列进行赋值。但是,这样的赋值方式可能会导致 log 数组的形状发生改变
为了避免这种情况,你可以使用 NumPy 的 take 函数来获取 log 数组的第 num2 列,然后使用 put 函数将 log_num2 中的值赋值到 log 数组的第 num2 列。

col = np.take(log, num2, axis=1)
np.put(col, np.arange(col.size), log_num2)

我猜测原因可能是这样的:

你使用的是切片赋值的方式,即 log[::num2] = log_num2,但是这种方式是将log_num2整个作为一个元素插入到log数组的num2列的第一个位置,而不是将log_num2中的每一个元素插入到log数组的num2列中。

举个例子,如果你有一个三行两列的数组 log,并有一个单列数组 log_num2,那么使用 log[::num2] = log_num2 后,log数组可能会变成这样:

[[0, log_num2], [0, log_num2], [0, log_num2]]

所以你可以尝试使用循环遍历的方式替换数组中的元素,例如:

for i in range(log.shape[0]):
log[i][num2] = log_num2[i]

这样就可以将log_num2中的每一个元素插入到log数组的num2列中。

如果你想要替换数组中所有的列,那么可以将num2改为:,例如:

log[:, :] = log_num2

这样就可以将log_num2整个数组替换到log数组的所有位置。

可以将完整的代码上传一下吗?

二维数组的替换方式, 代码如下(测试数据):

import numpy as np

log = np.array([[1, 1, 1],
                [11, 11, 11]])

log_num2 = np.array([[1, 1, 1]])
print("log:")
print(log)

print("log_num2:")
print(log_num2)

# 替换 1:2 表示二维数组从上往下从1开始数取1列, 0:3 表示二维数组从左往右从0开始取3log[1:2, 0:3] 表示 [[11 11 11]]
log[1:2, 0:3] = log_num2

# 输出结果
print("result: ")
print(log)

打印结果:

log:
[[ 1  1  1]
 [11 11 11]]
log_num2:
[[1 1 1]]
result: 
[[1 1 1]
 [1 1 1]]

Process finished with exit code 0