如何解决从保留原始数据形状的 numpy 列中减去单个值
我想从一个 numpy 列中减去一个给定的值。例如,给定一个二维矩阵,我想从给定的列中减去一个任意值。
我知道这可以通过以下代码实现:
numpy_matrix[:,0] -= my_value
基本上我从 0 列中减去 my_value
。
我想做的是:
result = numpy_matrix[:,0] - my_value
其中 result
具有 numpy_matrix
的原始形状,而不是单个向量。例如,如果 numpy_matrix.shape=(4,3)
,使用上面的代码我将得到 result.shape=(4,)
。
我想要做的是从选定的列中减去我的值,并返回一个与原始矩阵 (numpy_matrix
) 具有相同形状但具有“转换”列的矩阵。
有没有办法在 numpy 中有效地做到这一点,而无需减去然后从原始 numpy_matrix
中“手动”连接剩余的列?
编辑:因为我注意到它有点不清楚,我的目标是创建一个与原始矩阵相同的新矩阵(相同的形状,相同的数据),但修改了第 i 列通过减法运算。
解决方法
我不确定我是否理解,您到底在尝试什么,但我认为这可以满足您的要求:
import numpy as np
def sub(mtx,col,num):
# ret = np.ones(mtx.shape,np.float16)
# ret[:,:] = mtx[:,:]
ret = mtx.copy()
ret[:,col] -= num
return ret
original = np.ones((4,6),np.float16) # change to your shape and type
# fill with your original values here
result = sub(original,3,3)
print("Original:")
print(original)
print("Result:")
print(result)
我会创建一个具有相同形状的新矩阵,用原始元素填充它,然后覆盖所需的列。
Original:
[[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]]
Result:
[[ 1. 1. 1. -2. 1. 1.]
[ 1. 1. 1. -2. 1. 1.]
[ 1. 1. 1. -2. 1. 1.]
[ 1. 1. 1. -2. 1. 1.]]
,
如果我知道您想覆盖原始数组或创建一个大小相同的新数组,但第一列减去标量,我会更好地回答您。
覆盖原始数组,我们可以按照您提供的第一个代码块(好的和简短的)或其他方式(相同的逻辑)进行操作:
numpy_matrix[:,0]=numpy_matrix[:,0]-my_value
或
numpy_matrix[:,0]=result
如果你想创建一个新的(对我来说听起来很奇怪),但是复制原始数组并编写相同的逻辑来覆盖新数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。