- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个有点难以解释,所以让我通过一个例子向您展示我所指的内容:
from statistics import mean
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
import random
# xs = np.array([1,2,3,4,5,6], dtype=np.float64)
# ys = np.array([5,4,6,5,6,7], dtype=np.float64)
def create_dataset(hm, variance, step=2, correlation=False):
val = 1
ys = [] # empty list
for i in range(hm):
y = val + random.randrange(-variance, variance)
ys.append(y)
if correlation and correlation == 'pos':
val += step
elif correlation and correlation == 'neg':
val -= step
xs = [i for i in range(len(ys))]
return np.array(xs, dtype=np.float64), np.array(ys, dtype=np.float64)
现在让我们创建一个数据集:
xs, ys = create_dataset(30, 12, 2, correlation='pos')
print("X series: %s\n\nY series: %s" % (xs, ys))
示例输出:
X series: [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.]
Y series: [ 1. -6. 10. 9. -1. 13. 24. 21. 14. 12. 17. 29. 23. 37. 32.
36. 25. 27. 27. 47. 36. 32. 51. 37. 50. 47. 61. 45. 65. 59.]
来自 OOP 背景的我对此有点困惑:
if correlation and correlation == 'pos':
val += step
如您所见,在 y
已分配后,val 发生了更改。但它似乎仍然影响 y
后分配。因此,这看起来就像某种方程引用保存在内存中,并且可以通过更改其任何运算符来影响结果。
为什么以及如何在 Python 中实现这一点?在 C# 或 Java 中,一旦分配了原始 float 或整数就不会改变,除非直接引用它。当您使用对象浮点数或整数时,我认为这是可能的,但前提是另一个变量被分配给相同的引用。据我所知,更改先前方程的输入也不会做到这一点。
无论如何,似乎有一些与Python相关的事情我不熟悉。
最佳答案
随机方差使得很难看出 val
发生了什么。那么让我们简化一下这个函数:
In [16]: def create_dataset(hm, step=2, correlation='pos'):
...: val = 1
...: ys = [] # empty list
...: for i in range(hm):
...: y = val
...: ys.append(y)
...: if correlation and correlation == 'pos':
...: val += step
...: elif correlation and correlation == 'neg':
...: val -= step
...: return ys
In [17]: create_dataset(5, 2, "pos")
Out[17]: [1, 3, 5, 7, 9]
In [18]: create_dataset(5, 2, "neg")
Out[18]: [1, -1, -3, -5, -7]
这正是我所期望的。 val
按 step
递增(或递减),每次迭代一次。新值将在下一个循环中存储在ys
中。
In [19]: val = 0
In [20]: val += 12
In [21]: val
Out[21]: 12
In [22]: val *= 2
In [23]: val
Out[23]: 24
对于像这样的数字 val -= 12
等同于:
In [24]: val = val - 12
In [25]: val
Out[25]: 12
新编号已分配给 val
。
“+”和“+=”转换为方法调用:
val + 12 => val.__add__(12)
val +=12 => val.__iadd__(12)
这些方法是为每种对象类型定义的,因此详细信息可能会因类型而异。
对于列表和 numpy 数组等可变对象,“+”和“+=”之间的差异更为显着,有时会导致迭代出现问题。
我相信 C 和/或 C++ 有 i++
操作。这有点像 a += 1
。
关于python - 之后改变输入运算符会影响之前方程的乘积吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697393/
我希望我的问题有一个非常简单的解决方案。我只是找不到它: 假设您有两个向量(一个是列向量,一个是行向量)A、B: A = [1,2,3] B = [4;5;6] 如果我们按如下方式将它们相乘,我们会得
我有一个 Tuple 的列表: "dog", 25 "cat", 5 "cat", 7 "rat", 4 "dog", 10 我需要的 Linq 查询规则必须满足以下条件:我需要按字符串值对元组进行分
给定 2 个不同的 NDarray,A 和 B,形状相同但尺寸任意,我如何获得 NDarray C,其中 C 是 A 和 B(含)范围内所有整数的乘积。 我的意思是A是起始数组,B是结束数组,我想要数
假设我需要为某些输入构建一个真值表,它要求我提供逻辑和、算术和和逻辑乘积。它们之间有什么区别? 最佳答案 逻辑和 - 一种计算机加法,当一个或两个输入变量为 1 时,结果为 1;当输入变量均为 0 时
我正在尝试执行一个简单的矩阵乘法 vector 乘法,但出于某种原因,我在几次乘法的结果中得到了错误的符号。我不知道为什么会这样,任何指针将不胜感激。 这是我的全部代码,即矩阵 * vector 函数
我在上一个主题中找到了一些关于 cuda 矩阵 vector 积的代码: Matrix-vector multiplication in CUDA: benchmarking & performanc
我遇到的第一个问题是显示三个数字中的最小和最大。出现两个单独的警报 - 第一个警报说第二大数字是最大的(因为它还没有考虑第三个数字),第二个警报正确地指出三个中最大的数字是最大的.不确定为什么会这样—
我有两个矩阵 a = np.matrix([[1,2], [3,4]]) b = np.matrix([[5,6], [7,8]]) 我想得到元素乘积,[[1*5,2*6], [3*7,4*8]],等
我有一个数组和一个 vector : ArrayXd m1(3, 1337); ArrayXd v1(1, 1337); ArrayXd result(3, 1337); 现在我想将 m1 的每一行与
我有两个 3D 矩阵: a = np.random.normal(size=[3,2,5]) b = np.random.normal(size=[5,2,3]) 我想要每个切片分别沿 2 轴和 0
我正在创建一个 C++ 软件,我需要一个包装器,它基于 Eigen 库,实现类似于官方网页中解释的运算符* https://eigen.tuxfamily.org/dox/group__Matrixf
我正在尝试将张量 (m, n, o) 分解为矩阵 A(m, r)、B (n, r) 和 C (k, r)。这被称为 PARAFAC 分解。 Tensorly已经做了这种分解。 一个重要的步骤是将 A、
我目前正面临这个问题。我有两个矩阵 MatrixXf答: 0.5 0.5 0.5 0.50.694496 0.548501 0.680067 0.7171110
我有以下 df: df = pd.DataFrame({'A': ['foo', 'bar', 'dex', 'tru'], 'B': ['abc', 'def'
假设我们有 2 个 2X2 numpy 数组: X=np.array([[0,1],[1,0]]) 和 I=np.array([[1,0],[0,1]]) 考虑一下克罗内克产品 XX=X^X 我让符号
我想弄清楚这是 Eigen 中的错误还是我做错了什么。我只想要两个复数 vector [1,i] 和 [1,-i] 的点积。答案是 1*1 + i*(-i) = 2。但是 Eigen 给出的答案是零。
我的 C 代码有问题。我所做的就是这样: #include int main() { float zahlen[2]; for (int i = 0; i < 2; i++) {
为了找到数字的因数,我正在使用函数 void primeFactors(int n) # include # include # include # include using namespa
我是一名优秀的程序员,十分优秀!