numpy 数组符号匹配
numpy array sign matching
我有两个形状为 (3, 4) 的 numpy 数组,它们具有带随机符号的随机数:
x = np.random.normal(size = (3, 4))
y = np.random.normal(size = (3, 4))
x
'''
array([[-0.58970016, -1.35424573, -0.86332466, -1.15913228],
[-1.78109087, -0.82991292, 0.94672891, 0.85399162],
[ 0.78427527, 0.86797663, -1.33381457, -0.02626438]])
'''
y
'''
array([[ 0.45801392, 0.80853258, -0.69266633, 3.06853073],
[ 1.58880983, -1.26883392, 2.16452527, 0.8143449 ],
[ 1.40739241, 1.00436608, 0.0511364 , 1.00537412]])
'''
我现在想根据 np 数组 'x' 中的数字符号更改 np 数组 'y' 中数字的符号。我想出的代码是:
np.where(np.sign(x) != np.sign(y), y, -y)
'''
array([[ 0.45801392, 0.80853258, 0.69266633, 3.06853073],
[ 1.58880983, 1.26883392, -2.16452527, -0.8143449 ],
[-1.40739241, -1.00436608, 0.0511364 , 1.00537412]])
'''
我也试过:
np.where((np.sign(x) != np.sign(y)) & (np.sign(x) > 0), y, -y)
然而,这显然没有起到作用。有帮助吗?
谢谢!
为什么不直接用y
的绝对值,即np.abs(y)
,然后简单的加上x
的符号, 即 np.sign(x)
,使用逐元素乘法 *
,得到:
import numpy as np
np.random.seed(42) # for reproducibility
x = np.random.normal(size = (3, 4))
>>> [[ 0.49671415 -0.1382643 0.64768854 1.52302986]
[-0.23415337 -0.23413696 1.57921282 0.76743473]
[-0.46947439 0.54256004 -0.46341769 -0.46572975]]
y = np.random.normal(size = (3, 4))
>>> [[ 0.24196227 -1.91328024 -1.72491783 -0.56228753]
[-1.01283112 0.31424733 -0.90802408 -1.4123037 ]
[ 1.46564877 -0.2257763 0.0675282 -1.42474819]]
导致:
y = np.sign(x)*np.abs(y)
>>> [[ 0.24196227 -1.91328024 1.72491783 0.56228753]
[-1.01283112 -0.31424733 0.90802408 1.4123037 ]
[-1.46564877 0.2257763 -0.0675282 -1.42474819]]
>>> np.allclose(np.sign(x),np.sign(y))
>>> True
希望对您有所帮助。
我有两个形状为 (3, 4) 的 numpy 数组,它们具有带随机符号的随机数:
x = np.random.normal(size = (3, 4))
y = np.random.normal(size = (3, 4))
x
'''
array([[-0.58970016, -1.35424573, -0.86332466, -1.15913228],
[-1.78109087, -0.82991292, 0.94672891, 0.85399162],
[ 0.78427527, 0.86797663, -1.33381457, -0.02626438]])
'''
y
'''
array([[ 0.45801392, 0.80853258, -0.69266633, 3.06853073],
[ 1.58880983, -1.26883392, 2.16452527, 0.8143449 ],
[ 1.40739241, 1.00436608, 0.0511364 , 1.00537412]])
'''
我现在想根据 np 数组 'x' 中的数字符号更改 np 数组 'y' 中数字的符号。我想出的代码是:
np.where(np.sign(x) != np.sign(y), y, -y)
'''
array([[ 0.45801392, 0.80853258, 0.69266633, 3.06853073],
[ 1.58880983, 1.26883392, -2.16452527, -0.8143449 ],
[-1.40739241, -1.00436608, 0.0511364 , 1.00537412]])
'''
我也试过:
np.where((np.sign(x) != np.sign(y)) & (np.sign(x) > 0), y, -y)
然而,这显然没有起到作用。有帮助吗?
谢谢!
为什么不直接用y
的绝对值,即np.abs(y)
,然后简单的加上x
的符号, 即 np.sign(x)
,使用逐元素乘法 *
,得到:
import numpy as np
np.random.seed(42) # for reproducibility
x = np.random.normal(size = (3, 4))
>>> [[ 0.49671415 -0.1382643 0.64768854 1.52302986]
[-0.23415337 -0.23413696 1.57921282 0.76743473]
[-0.46947439 0.54256004 -0.46341769 -0.46572975]]
y = np.random.normal(size = (3, 4))
>>> [[ 0.24196227 -1.91328024 -1.72491783 -0.56228753]
[-1.01283112 0.31424733 -0.90802408 -1.4123037 ]
[ 1.46564877 -0.2257763 0.0675282 -1.42474819]]
导致:
y = np.sign(x)*np.abs(y)
>>> [[ 0.24196227 -1.91328024 1.72491783 0.56228753]
[-1.01283112 -0.31424733 0.90802408 1.4123037 ]
[-1.46564877 0.2257763 -0.0675282 -1.42474819]]
>>> np.allclose(np.sign(x),np.sign(y))
>>> True
希望对您有所帮助。