详解 psis_all_orth=psis_all_origin[:] for loop_psi in range(len(psis_all_origin)): psi_temp=psis_all_origin[loop_psi] for loop_n in range(loop_psi): psi_temp=psi_temp- np.dot(psis_all_orth[loop_n].conj().T, psis_all_orth[loop_psi])[0][0] * psis_all_orth[loop_n] if np.sqrt(np.dot(psi_temp.conj().T, psi_temp))[0][0] > 0.01: # print('len of psi',loop_psi,np.sqrt(np.dot(psi_temp.conj().T, psi_temp))[0][0]) psi_temp = psi_temp * 1.0 / np.sqrt(np.dot(psi_temp.conj().T, psi_temp)[0][0]) psis_all_orth[loop_psi] = psi_temp
时间: 2023-04-07 07:02:03 浏览: 226
这段代码的作用是对一个包含多个向量的列表进行正交化处理,生成一个新的正交向量列表psis_all_orth。
具体实现方式是:先将原始向量列表psis_all_origin复制一份,赋值给psis_all_orth。然后对于psis_all_origin中的每一个向量,都进行以下操作:
1. 将该向量赋值给临时变量psi_temp。
2. 对于已经处理过的向量列表中的每一个向量,都进行以下操作:
a. 计算该向量与当前处理的向量的内积,将其乘以已处理向量的单位向量。
b. 将该向量减去上述结果,得到一个新的向量。
3. 判断新的向量的模长是否大于0.01,如果是,则将其添加到正交向量列表psis_all_orth中。
最终,psis_all_orth中的向量两两正交,且模长均大于0.01。
相关问题
android解压时Error while unzipping java.io.FileNotFoundException: /data/vendor/nfs/nfs_ota/psis_default/patch/psis_default.img.p (No such file or directory)
这个错误提示表明在解压时找不到指定的文件或目录。请确保你的 ZIP 文件路径和解压目标目录路径是正确的,并且目标目录已经存在。
此外,还要检查你的应用是否具有访问 `/data/vendor/nfs/nfs_ota/psis_default/patch/` 目录的权限。在 Android 中,访问系统级目录可能需要特殊权限。
如果你没有权限访问该目录,你可以尝试将解压目标目录更改为你应用具有读写权限的其他目录。例如,你可以使用应用的私有存储目录:
```java
String destDirectory = getApplicationContext().getFilesDir().getAbsolutePath() + File.separator + "unzipped";
```
这将创建一个名为 "unzipped" 的文件夹在你的应用私有存储目录中,并将其作为解压的目标目录。
如果问题仍然存在,请确保你的 ZIP 文件没有损坏,并且其中包含了正确的文件和目录结构。
如果你仍然遇到问题,请提供更多的代码和错误堆栈信息,以便我能够更好地帮助你解决问题。
def psi_overlap(self, upper: int, lower: int, shift=0) -> np.ndarray: """Return psi[upper] * psi[lower] with psi[lower] shifted by shift number of periods.""" if self.crystalType == 'ZincBlende': return sum( phi[upper] * self._shift_psi(phi[lower], shift) for phi in (self.psis, self.philh, self.phiso)) # default fallback and crystalType == 'simple' return self.psis[upper] * self._shift_psi(self.psis[lower], shift)
在这段代码中,`psi_overlap` 是一个方法,它接受 `upper`、`lower` 和 `shift` 作为参数,并返回一个 `np.ndarray` 类型的数组。这个方法的作用是计算 `psi[upper] * psi[lower]`,其中 `psi[lower]` 被向右移动了 `shift` 个周期。
在方法的实现中,首先判断 `self.crystalType` 是否为 'ZincBlende'。如果是的话,就使用一个生成器表达式遍历三个数组 `self.psis`、`self.philh` 和 `self.phiso` 中的元素,并计算 `phi[upper] * self._shift_psi(phi[lower], shift)` 的和。这里的 `_shift_psi` 方法用于将 `phi[lower]` 向右移动 `shift` 个周期。
如果 `self.crystalType` 不是 'ZincBlende',或者没有设置,默认情况下,就使用 `self.psis[upper] * self._shift_psi(self.psis[lower], shift)` 进行计算,并返回结果。
阅读全文